Урок 01

Что такое хуки

Хуки — это функции, которые позволяют использовать состояние и другие возможности React без написания классов. Появились в React 16.8 и с тех пор стали основным способом написания компонентов.

Зачем нужны хуки

До хуков состояние и жизненный цикл были доступны только классовым компонентам. Логику приходилось распределять по методам componentDidMount, componentDidUpdate, componentWillUnmount. Одна задача оказывалась размазанной по нескольким местам.

Хуки решают это: логика группируется по смыслу, а не по жизненному циклу.

Правила хуков

React накладывает два жёстких правила:

1. Вызывай хуки только на верхнем уровне. Не внутри условий, циклов, вложенных функций.

// Плохо
function Component({ isAdmin }) {
    if (isAdmin) {
        const [name, setName] = useState(''); // ошибка
    }
}
// Хорошо
function Component({ isAdmin }) {
    const [name, setName] = useState('');

    if (isAdmin) {
        // использование
    }
}

2. Вызывай хуки только из React-функций. Из компонентов или других хуков. Не из обычных функций.

Почему правила важны

React определяет порядок вызовов хуков. При каждом рендере они должны вызываться в одном и том же порядке. Если хук вызывается условно — порядок сбивается, и React путает, какое состояние какому хуку принадлежит.

Встроенные хуки

  • useState — состояние
  • useEffect — побочные эффекты
  • useContext — доступ к контексту
  • useRef — ссылка на DOM-элемент или значение
  • useMemo — мемоизация значения
  • useCallback — мемоизация функции
  • useReducer — сложное состояние
  • useLayoutEffect — синхронный эффект после DOM
  • useId — уникальный ID
  • useTransition — отложенные обновления
  • useDeferredValue — отложенное значение

Кастомные хуки

Свои хуки — это функции, которые начинаются с use и вызывают другие хуки:

function useToggle(initial = false) {
    const [value, setValue] = useState(initial);
    const toggle = () => setValue((v) => !v);
    return { value, toggle };
}

Линтер

Плагин eslint-plugin-react-hooks проверяет правила хуков. Vite-шаблон уже включает его. Если правило нарушено — линтер покажет ошибку.

Итоги

  • Хуки — функции для состояния и эффектов
  • Вызываются только на верхнем уровне компонента или хука
  • Порядок вызовов должен быть неизменным
  • Свои хуки начинаются с use