Skip to content

React-хуки объяснённые

React-хуки, используемые каждый день, сгруппированные по задачам: хранить состояние, запускать эффекты, мемоизировать вычисления, делить контекст и выходить за пределы рендера. Каждая строка связывает хук с его назначением.

Хук — это функция, которая позволяет функциональному компоненту использовать возможности React: состояние, жизненный цикл, контекст и настройку производительности. Два правила: вызывайте хуки на верхнем уровне (никогда внутри циклов или условий) и вызывайте их только из функций React. Остальное — выбор подходящего хука для задачи.

Справочная таблица · 24 записи
24 of 24 rows
Состояние
Хранит одно значение, изменение которого вызывает повторный рендер.Локальное состояние компонента: поля форм, переключатели, счётчики.
Хранит состояние, управляемое редьюсером действий, как небольшой стор.Состояние из нескольких связанных полей или со сложными переходами.
Хранит изменяемое значение, которое НЕ вызывает повторный рендер.Изменяемые контейнеры, таймеры и прямой доступ к DOM через .current.
Эффекты
Запускает побочный эффект после рендера, с необязательной очисткой.Загрузка данных, подписки и синхронизация с внешней системой.
Функция, возвращённая эффектом, выполняется перед следующим эффектом и ещё раз при размонтировании.Отмена подписок и таймеров или прерывание выполняющегося запроса.
Как useEffect, но срабатывает синхронно после изменения DOM.Чтение или запись раскладки до отрисовки браузером (тосты, тултипы).
Обработчики событий выполняются в ответ на действие пользователя; эффекты — после рендера, для синхронизации.Логика по действию пользователя принадлежит обработчику, логика по рендеру — эффекту.
В разработке монтирует компоненты дважды, чтобы эффекты выполнились, очистились и выполнились снова.Поиск двойных подписок и отсутствующей очистки до продакшена.
Производительность
Кэширует вычисленное значение до изменения зависимостей.Избегание дорогих пересчётов между рендерами; смените значение в зависимостях намеренно, чтобы сбросить кэш.
Кэширует ссылку на функцию до изменения зависимостей.Стабильные колбэки, передаваемые мемоизированным детям или используемые как зависимости.
Пропускает повторный рендер компонента, чьи пропсы не изменились.Тяжёлые дочерние компоненты; передайте функцию сравнения вторым аргументом, когда поверхностного равенства мало (HOC, а не хук).
Контекст и внешние дескрипторы
Читает значение контекста без проброса пропсов.Тема, локаль или авторизованный пользователь, общие для всего дерева.
Настраивает экземпляр, который родитель видит через ref.Передача узкого API из дочернего компонента через forwardRef.
Конкурентность и прочее
Помечает обновление состояния как несрочное, чтобы интерфейс оставался отзывчивым.Сохранение отзывчивости ввода, пока тяжёлый список перерендеривается.
Откладывает значение, чтобы обновления можно было прерывать.Дебаунс дорогих рендеров без таймеров.
Генерирует стабильный уникальный id для атрибутов доступности.Связывание label и input между серверным и клиентским рендером.
Читает промис или контекст во время рендера; единственный хук, который можно вызывать условно.Распаковка промиса с Suspense или чтение контекста внутри раннего return.
Хранит состояние, управляемое действием формы, с флагом ожидания в комплекте.Отправки форм, возвращающие ошибки или обновлённое состояние для показа инлайн.
Сразу рендерит оптимистичное значение, а затем возвращается к реальному состоянию, когда действие завершится.Показ лайка или отправленного сообщения, пока запрос к серверу в полёте.
Читает состояние ожидания окружающего <form>, без пропсов.Кнопка отправки, которая отключается, пока родительская форма отправляется.
Подписывается на стор вне React и читает один согласованный снапшот.Браузерные API вроде статуса сети или сторонние сторы состояния.
Запускается до эффектов раскладки, создан для вставки правил CSS-in-JS.Библиотеки стилей, которым нужно вставить правила до чтения раскладки.
Показывает собственную метку для внутреннего состояния хука в React DevTools.Маркировка того, что хранит кастомный хук, при отладке.
Ваш собственный хук, компонующий встроенные, чтобы делиться логикой.Многоразовая логика с состоянием вроде useFetch или useMediaQuery.