Как избежать лишних ререндеров при работе с React Context
Стандартный хук
👉 @sWebDev
Стандартный хук
useContext
часто вызывает лишние ререндеры, даже если компоненту нужна лишь часть состояния. Статья показывает, как решить эту проблему, создав собственный легковесный Store и хук с селекторами, похожий на useSelector
в Redux. 👉 @sWebDev
👍2❤1
Pressure.js
Взаимодействие с интерфейсом часто ограничено простыми кликами. Pressure.js расширяет эти возможности, добавляя поддержку силы нажатия через Force Touch, 3D Touch и Pointer Pressure.
👉 @sWebDev
Взаимодействие с интерфейсом часто ограничено простыми кликами. Pressure.js расширяет эти возможности, добавляя поддержку силы нажатия через Force Touch, 3D Touch и Pointer Pressure.
👉 @sWebDev
❤2
Композиция хуков
Какие два стандартных хука объединяет в себе
Забыли? Вернитесь к посту от14.07.2025 .
👉 @sWebDev
Какие два стандартных хука объединяет в себе
useQueryState
?Забыли? Вернитесь к посту от
👉 @sWebDev
❤2
Какие два стандартных хука объединяет в себе useQueryState?
Anonymous Quiz
42%
useState и useEffect.
9%
useContext и useReducer.
43%
useState и useSearchParams.
6%
useMemo и useCallback.
👍4
Декларативное управление подписками
Стандартная отписка от
Пакет
👉 @sWebDev
Стандартная отписка от
Observable
в ngOnDestroy
громоздка и провоцирует утечки памяти.Пакет
@angular/core/rxjs-interop
предлагает более чистое решение. Оператор takeUntilDestroyed
декларативно связывает жизненный цикл подписки с жизненным циклом компонента. Подписка автоматически завершится при уничтожении компонента. Важным условием его работы является вызов в инъекционном контексте, например, в конструкторе компонента.import { Component, inject } from '@angular/core';
import { interval } from 'rxjs';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
@Component({
selector: 'app-news-feed',
template: '<p>Последнее обновление: {{ time }}</p>',
standalone: true,
})
export class NewsFeedComponent {
time = 0;
constructor() {
interval(1000)
.pipe(takeUntilDestroyed())
.subscribe(value => {
this.time = value;
console.log(`Новое событие: ${value}`);
});
}
}
👉 @sWebDev
👍3❤2
Moveable
Наделить DOM-элементы возможностью свободного перемещения и масштабирования вручную является непростой задачей. Библиотека Moveable инкапсулирует данную сложную логику и содержит готовые инструменты для манипуляции объектами в реальном времени. Этот инструмент отлично подходит для создания интерактивных редакторов, настраиваемых дашбордов или любых приложений с drag-and-drop интерфейсом.
👉 @sWebDev
Наделить DOM-элементы возможностью свободного перемещения и масштабирования вручную является непростой задачей. Библиотека Moveable инкапсулирует данную сложную логику и содержит готовые инструменты для манипуляции объектами в реальном времени. Этот инструмент отлично подходит для создания интерактивных редакторов, настраиваемых дашбордов или любых приложений с drag-and-drop интерфейсом.
👉 @sWebDev
❤2
Как React Fiber улучшает производительность рендеринга
Когда приложение React начинает «тормозить» при больших обновлениях, проблема часто кроется в блокировке основного потока. Статья подробно объясняет, как архитектура React Fiber решает данную проблему. Разбирается, как Fiber позволяет разбивать рендеринг на части и приостанавливать его, чтобы интерфейс оставался отзывчивым. Понимание этого механизма помогает писать более производительный код.
👉 @sWebDev
Когда приложение React начинает «тормозить» при больших обновлениях, проблема часто кроется в блокировке основного потока. Статья подробно объясняет, как архитектура React Fiber решает данную проблему. Разбирается, как Fiber позволяет разбивать рендеринг на части и приостанавливать его, чтобы интерфейс оставался отзывчивым. Понимание этого механизма помогает писать более производительный код.
👉 @sWebDev
❤2
Atropos.js
Интерактивные элементы часто выглядят плоскими и не привлекают внимание. Atropos.js решает эту проблему, создавая трёхмерный параллакс-эффект при наведении курсора. Библиотека помогает добавить глубину карточкам, баннерам и другим блокам, делая интерфейс более живым и запоминающимся.
👉 @sWebDev
Интерактивные элементы часто выглядят плоскими и не привлекают внимание. Atropos.js решает эту проблему, создавая трёхмерный параллакс-эффект при наведении курсора. Библиотека помогает добавить глубину карточкам, баннерам и другим блокам, делая интерфейс более живым и запоминающимся.
👉 @sWebDev
👍5👎2❤1
Определение типа
Что представляет собой тип
Забыли? Вернитесь к посту от21.07.2025 .
👉 @sWebDev
Что представляет собой тип
ReactElement
в контексте React?Забыли? Вернитесь к посту от
👉 @sWebDev
❤1
Что представляет собой тип ReactElement в контексте React?
Anonymous Quiz
60%
Результат вызова React.createElement.
27%
Любой дочерний элемент, включая строки и числа.
9%
Специальный тип для работы с React.Fragment.
3%
Псевдоним для типа string | number.
👍4👎1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Отслеживание значения с условием
Базовый хук
Внутренний
👉 @sWebDev
Базовый хук
usePrevious
можно уточнить, добавив выборочное сохранение. Такой хук принимает вторым аргументом предикат-функцию, которая решает, нужно ли обновлять "предыдущее" значение.Внутренний
ref
хука изменится только при положительном ответе предиката. Это позволяет отслеживать не последнее значение, а последнее, подошедшее под определенное правило.import { useEffect, useRef } from 'react';
function useConditionalPrevious<T>(
value: T,
predicate: (prev: T, current: T) => boolean
) {
const previousRef = useRef<T>();
const currentRef = useRef<T>(value);
useEffect(() => {
if (predicate(currentRef.current, value)) {
previousRef.current = currentRef.current;
}
currentRef.current = value;
}, [value, predicate]);
return previousRef.current;
}
👉 @sWebDev
👍2