Какие хуки существуют кроме useState и useEffect
Что проверяют
Знаете ли вы хуки дальше базовой пары и понимаете ли, какую задачу решает каждый. Интервьюер обычно цепляется за один из названных: чем useMemo отличается от useCallback, когда нужен useLayoutEffect, почему изменение useRef не вызывает перерисовку.
Как отвечать
Сгруппируйте хуки по задачам:
- состояние:
useReducerдля сложных переходов, где новое состояние зависит от действия;useContextдля чтения контекста без проброса пропсов; - ссылки:
useRefхранит изменяемое значение между рендерами без перерисовки или ссылку на DOM-узел;useImperativeHandleоткрывает родителю ограниченный набор методов. В React 19refпередаётся как обычный проп,forwardRefбольше не нужен; - эффекты:
useLayoutEffectсрабатывает после изменения DOM, но до отрисовки, для замеров и позиционирования;useInsertionEffectнужен библиотекам CSS-in-JS;useEffectEventчитает актуальные значения внутри эффекта, не добавляя их в зависимости; - производительность:
useMemoкэширует результат вычисления,useCallbackсаму функцию. Смысл есть, когда значение уходит вmemo-компонент или в зависимости эффекта. С React Compiler эту мемоизацию делает компилятор; - конкурентный рендер:
useTransitionпомечает обновление как несрочное,useDeferredValueоткладывает тяжёлую перерисовку по значению; - прочее:
useIdдля стабильных id при SSR,useSyncExternalStoreдля подписки на внешний стор,useDebugValueдля подписи в DevTools; - React 19:
useчитает промис или контекст и, в отличие от остальных, может вызываться внутри условия;useActionStateиuseOptimisticдля форм и оптимистичных обновлений,useFormStatusизreact-dom.
Закончите пользовательскими хуками: функции с префиксом use, которые выносят повторяющуюся логику.
Где спотыкаются
Оборачивают всё в useMemo и useCallback. Без memo у потребителя это только лишняя работа и шум в коде.
Кладут в useRef то, что должно отображаться, и удивляются, что интерфейс не обновился.
Передают в провайдер контекста новый объект на каждом рендере. Все потребители перерисовываются, даже если данные не менялись.