Уровень: middle · Сложность 3/5 · Обновлено 27 апреля 2026 г.
В массив зависимостей useEffect нужно положить все значения из области видимости компонента, которые читаются внутри эффекта и могут меняться: пропсы, state, локальные переменные, мемоизированные функции. Если этого не сделать — получишь stale closure (эффект работает с устаревшими значениями). Если положить лишнее — эффект будет перезапускаться слишком часто. ESLint-правило react-hooks/exhaustive-deps указывает большинство ошибок, но не все: например, оно не понимает, когда функция стабильна по факту.
Что важно для собеса
⚠️ Этот файл — пример наполнения. Замени на свой реальный разбор.
Здесь у тебя есть всё, чтобы написать развёрнутый ответ:
- Подзаголовки
## Подвохи,## Частые ошибки,## Как спрашивают - Блоки кода — будут подсвечены через Shiki
- Возможность вставлять
<MentorshipCTA />или другие компоненты прямо в MDX
// Stale closure: count в эффекте всегда 0 между перерендерами
useEffect(() => {
const id = setInterval(() => console.log(count), 1000);
return () => clearInterval(id);
}, []); // ← забыли count в зависимостях
Подвохи
- exhaustive-deps молчит, если функция вне компонента — это часто ловит интервьюер
- Объекты и массивы как зависимости вызывают перерендеры (нужно мемоизировать через useMemo)
- В React 19 есть useEvent (RFC), который снимает часть проблем — об этом стоит упомянуть
Как спрашивают в компаниях
- Яндекс: дают код с багом и просят найти, почему UI «застрял» (stale closure)
- Тинькофф: просят объяснить, что такое exhaustive-deps и можно ли его отключать
- Авито: даётся форма с эффектом, нужно правильно подписать массив зависимостей
Каждую неделю — разборы собеседований, чек-листы, обновления React и фронта. Без воды.