Какие бывают хуки

Хуки позволяют использовать состояние и другие возможности React без написания классов. С их появлением в версии 16.8, разработчики получили доступ к мощному и выразительному инструменту для создания компонентов. Рассмотрим основные примеры, а также некоторые дополнительные, которые предоставляет React.

Основные хуки:

1. useState

  • Позволяет добавлять состояние к функциональным компонентам.
  • Пример:
  const [count, setCount] = useState(0);

2. useEffect

  • Даёт возможность выполнять побочные эффекты в компоненте, такие как обращения к API, подписки или таймеры.
  • Пример:
 useEffect(() => {
       document.title = `Вы нажали ${count} раз`;
     }, [count]); // Зависимость от состояния count

3. useContext

  • Даёт возможность получить текущее значение контекста, что упрощает доступ к данным в глубоко вложенных компонентах без их явной передачи через пропсы.
  • Пример:
const value = useContext(MyContext);

Дополнительные хуки:

1. useReducer

  • Альтернатива `useState` для более сложного управления состоянием, использует концепцию редьюсера для обработки сложных изменений состояния.
  • Пример:
     const [state, dispatch] = useReducer(reducer, initialState);

2. useCallback

  • Возвращает мемоизированный колбэк, который изменяется только если изменяются зависимости.
  • Пример:
     const memoizedCallback = useCallback(() => {
       doSomething(a, b);
     }, [a, b]);

3. useMemo

  • Возвращает мемоизированное значение, пересчитывается только при изменении зависимостей.
  • Пример:
     const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);

4. useRef

  • Возвращает изменяемый ref-объект, который можно использовать для доступа к DOM-элементам или хранения любого мутируемого значения.
  • Пример:
     const myRef = useRef(initialValue);

5. useImperativeHandle

  • Используется для передачи родительским компонентам инстанса значения из дочерних компонентов, обычно для управления фокусом, выделением текста или анимацией.
  • Пример:
     useImperativeHandle(ref, () => ({
       focus: () => {
         myTextInput.current.focus();
       }
     }));

6. useLayoutEffect

  • Похож на `useEffect`, но выполняется синхронно после всех изменений DOM. Используется для чтения макета из DOM и реагирования на эти изменения синхронно.
  • Пример:
     useLayoutEffect(() => {
       // Измерения или взаимодействия с DOM
     }, [dependencies]);

7. useDebugValue

  • Может использоваться для отображения метки для пользовательских хуков в React DevTools.
  • Пример:
     useDebugValue(value);

Основные хуки (`useState`, `useEffect`, `useContext`) позволяют добавлять состояние, работать с побочными эффектами и использовать контекст в функциональных компонентах

Дополнительные хуки предоставляют более специализированные или углублённые возможности для оптимизации, работы с рефами, мемоизации и других задач, связанных с жизненным циклом компонентов и управлением рендерингом.

Feb. 22, 2024, easyoffer