> Как правильно указывать зависимости в useEffect в React (React)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Иннотех, Точка, EvApps, EPAM, intelsy
Стек: React
> Пример ответа
В useEffect вторым аргументом передаётся массив зависимостей. Правило простое: включите в него все переменные, функции или пропсы, которые используются внутри эффекта и могут измениться между рендерами. Если зависимость не указана, эффект будет использовать устаревшее значение (stale closure).
Пример:
JSXuseEffect(() => {fetch(`/api/users/${userId}`).then(res => res.json()).then(setUser);}, [userId]); // userId - зависимость
Основные рекомендации:
-
Не включайте в массив стабильные ссылки (например,
dispatchиз Redux или функции, обёрнутые вuseCallbackс пустыми зависимостями). -
Если эффект использует пропсы или состояние, обязательно перечислите их.
-
Для сложной логики используйте
useReducerили выносите код в отдельные функции сuseCallback. -
Пустой массив
[]означает запуск только при монтировании (и размонтировании при возврате cleanup-функции).
Ошибки:
-
Пропуск зависимостей (например, не указан
userIdв примере выше) - эффект не обновится при смене пользователя. -
Включение лишних зависимостей (например, функций, создаваемых на каждый рендер) - вызовет бесконечный ререндер.
Используйте ESLint с плагином react-hooks/exhaustive-deps - он автоматически подсветит проблемы с зависимостями.
> Похожие задачи по frontend
Что такое React Context и как работает хук useContext
Что такое reconciliation в React и как он работает
Для чего используется React и почему его выбирают
Что такое batching в React и зачем он нужен
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью