> Можно ли условно вызывать хуки в React при разных рендерах (React)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Сбер

Стек: React

> Пример ответа

Нет, условно вызывать хуки в React при разных рендерах нельзя. Это нарушает одно из главных правил React - правило хуков (Rules of Hooks). Хуки должны вызываться в одном и том же порядке при каждом рендере компонента. Условные вызовы (например, внутри if, switch, циклов или после раннего возврата) приводят к несоответствию порядка вызовов между рендерами, что вызывает ошибки и непредсказуемое поведение.

Почему это важно: React использует порядок вызова хуков для сопоставления состояния между рендерами. Если на одном рендере хук не вызван, а на следующем вызван, React "сбивается" и не может правильно восстановить состояние.

Как обойти: Вместо условного вызова хука используйте условную логику внутри хука или разбивайте компонент на несколько. Например:

JSX
// ❌ Неправильно
if (condition) {
useEffect(() => { ... }, []);
}
// ✅ Правильно
useEffect(() => {
if (condition) {
// логика
}
}, [condition]);

Или выносите условную часть в отдельный компонент, который всегда рендерит свои хуки в одном порядке.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью