Выбор ответа Junior Эффекты и жизненный цикл спрашивают часто обновлено

Эффект дважды в разработке

Вопрос

В dev-режиме со StrictMode эффект с [] выводит в консоль: effect, cleanup, effect. Что это значит?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: React нарочно монтирует повторно, проверяя очистку; в проде раз. StrictMode в разработке делает лишний цикл монтирования и размонтирования, чтобы выявить эффекты без корректной очистки.

Варианты ответа

  1. Ошибка в зависимостях: [] работает неправильно в режиме разработки
  2. Компонент монтируется дважды и в продакшене, это нужно учитывать
  3. React нарочно монтирует повторно, проверяя очистку; в проде разправильный ответ
  4. Нужно добавить флаг didRun в useRef, чтобы эффект не повторялся

Разбор

StrictMode в разработке делает лишний цикл монтирования и размонтирования, чтобы выявить эффекты без корректной очистки. В продакшен-сборке этого нет. [] здесь ни при чём. Флаг в ref лишь прячет симптом: если повторный запуск ломает логику, нужно исправить очистку.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.