← Назад к вопросам

Какие знаешь Hooks помимо useState и useEffect?

1.3 Junior🔥 201 комментариев
#React

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI4 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Развёрнутый ответ о дополнительных React Hooks

Помимо базовых useState и useEffect, React предоставляет богатый набор дополнительных хуков, которые можно разделить на несколько категорий. Вот основные из них, которые я использую в разработке:

1. Контекстные хуки

useContext — позволяет подписаться на контекст React без использования Consumer компонентов. Это основной способ работы с глобальным состоянием или темами без пропс-дриллинга.

import React, { useContext } from 'react';

const ThemeContext = React.createContext('light');

function ThemedComponent() {
  const theme = useContext(ThemeContext);
  return <div className={`app ${theme}`}>Текущая тема: {theme}</div>;
}

2. Референсы и DOM-операции

useRef — создаёт мутабельный объект, который сохраняет своё значение между рендерами. Используется для:

  • Доступа к DOM-элементам
  • Хранения мутабельных значений без триггера ререндера
  • Сохранения предыдущих значений
import { useRef, useEffect } from 'react';

function FocusInput() {
  const inputRef = useRef(null);

  useEffect(() => {
    inputRef.current.focus();
  }, []);

  return <input ref={inputRef} type="text" />;
}

3. Хуки для производительности

useMemo — мемоизирует результат вычислений, пересчитывая только при изменении зависимостей:

const expensiveValue = useMemo(() => {
  return computeExpensiveValue(a, b);
}, [a, b]); // Пересчитывается только при изменении a или b

useCallback — мемоизирует колбэк-функции, предотвращая создание новых функций при каждом рендере:

const handleClick = useCallback(() => {
  console.log('Clicked!', itemId);
}, [itemId]); // Новая функция создаётся только при изменении itemId

useMemo и useCallback критически важны для оптимизации дочерних компонентов, обёрнутых в React.memo.

4. Хуки для редьюсеров

useReducer — альтернатива useState для сложной логики состояния:

import { useReducer } from 'react';

function reducer(state, action) {
  switch (action.type) {
    case 'increment':
      return { count: state.count + 1 };
    case 'decrement':
      return { count: state.count - 1 };
    default:
      throw new Error();
  }
}

function Counter() {
  const [state, dispatch] = useReducer(reducer, { count: 0 });
  
  return (
    <>
      Count: {state.count}
      <button onClick={() => dispatch({ type: 'decrement' })}>-</button>
      <button onClick={() => dispatch({ type: 'increment' })}>+</button>
    </>
  );
}

5. Сторонние и кастомные хуки

useLayoutEffect — похож на useEffect, но выполняется синхронно после всех DOM-мутаций, но до отрисовки браузером. Используется для измерений DOM и синхронных обновлений.

useLayoutEffect(() => {
  // Измеряем размер элемента
  const { width } = ref.current.getBoundingClientRect();
  setWidth(width);
}, []);

useDebugValue — помогает отлаживать кастомные хуки в React DevTools:

function useCustomHook(value) {
  const [state, setState] = useState(null);
  
  useDebugValue(state !== null ? 'Ready' : 'Loading');
  
  return [state, setState];
}

6. Дополнительные практические хуки

В реальных проектах также активно используются:

  • Кастомные хуки — создаются разработчиками для переиспользования логики
  • useId (React 18+) — генерация уникальных ID на клиенте и сервере
  • useTransition (React 18+) — маркировка обновлений как неблокирующих
  • useDeferredValue (React 18+) — отложенное обновление значения
  • useSyncExternalStore (React 18+) — подписка на внешние хранилища

Ключевые моменты использования:

  • Правило хуков: хуки можно вызывать только на верхнем уровне компонентов или других хуков
  • Зависимости в useEffect: всегда указывайте корректный массив зависимостей
  • Оптимизация: используйте useMemo и useCallback обдуманно, только при реальной необходимости
  • Кастомные хуки: создавайте для повторяющейся логики (аутентификация, формы, API-запросы)

Эти хуки образуют мощный инструментарий для создания производительных, поддерживаемых React-приложений. Понимание когда и какой хук использовать — важный навык senior-разработчика. В React 18 появились дополнительные хуки для Concurrent Features, которые позволяют лучше управлять приоритетами рендеринга и улучшают пользовательский опыт в сложных интерфейсах.