Frontend Mentors

Зависимости useEffect: что класть в массив

Уровень: 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 и можно ли его отключать
  • Авито: даётся форма с эффектом, нужно правильно подписать массив зависимостей
Подпишись на Telegram-канал

Каждую неделю — разборы собеседований, чек-листы, обновления React и фронта. Без воды.

Подписаться