Hack Frontend Community

Правила использования хуков в React

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

Но чтобы React корректно отслеживал и вызывал хуки, нужно строго соблюдать правила их использования.


Основные правила использования хуков

Вызывайте хуки только на верхнем уровне

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

Плохо:

if (someCondition) {
  const [count, setCount] = useState(0); // ошибка
}
**Хорошо:**
```tsx 
const [count, setCount] = useState(0);

if (someCondition) {
  // можно использовать count здесь
}

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

Вызывайте хуки только в функциональных компонентах или внутри кастомных хуков

Нельзя вызывать хуки в обычных функциях, обработчиках, условиях вне компонента.

Нельзя:

function doSomething() {
  const [val, setVal] = useState(0); // ошибка
}

Можно:

function MyComponent() {
  const [val, setVal] = useState(0); // правильно
  return <p>{val}</p>;
}

Или внутри своего хука:

function useCustomLogic() {
  const [state, setState] = useState(false);
  return { state, setState };
}

Хуки должны вызываться в одинаковом порядке при каждом рендере

Нельзя менять порядок хуков при разных условиях. Это приводит к неправильному сопоставлению значений

// Плохо
if (flag) {
  useEffect(() => {}, []); // может сломаться при следующем рендере
}

Как гарантировать правильное использование?

  • eslint-plugin-react-hooks — он поможет отлавливать нарушения.
  • Не помещайте хуки внутрь if, for, switch, try/catch и любых вложенных функций.

Важно:

Если нарушить правила использования хуков, React не сможет правильно отслеживать состояние, эффекты и другие внутренние данные. Это приведёт к ошибкам и непредсказуемому поведению.