Выбор ответа Junior Эффекты и жизненный цикл спрашивают часто обновлено
Эффект дважды в разработке
Вопрос
В dev-режиме со StrictMode эффект с [] выводит в консоль: effect, cleanup, effect. Что это значит?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: React нарочно монтирует повторно, проверяя очистку; в проде раз. StrictMode в разработке делает лишний цикл монтирования и размонтирования, чтобы выявить эффекты без корректной очистки.
Варианты ответа
- Ошибка в зависимостях:
[]работает неправильно в режиме разработки - Компонент монтируется дважды и в продакшене, это нужно учитывать
- React нарочно монтирует повторно, проверяя очистку; в проде разправильный ответ
- Нужно добавить флаг
didRunвuseRef, чтобы эффект не повторялся
Разбор
StrictMode в разработке делает лишний цикл монтирования и размонтирования, чтобы выявить эффекты без корректной очистки. В продакшен-сборке этого нет. [] здесь ни при чём. Флаг в ref лишь прячет симптом: если повторный запуск ломает логику, нужно исправить очистку.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.