Выбор ответа Junior Рендер и reconciliation обновлено
Двойной вызов в StrictMode
Вопрос
В режиме разработки с <StrictMode> console.log в теле компонента срабатывает дважды. Почему?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: React нарочно вызывает компонент дважды, ища нечистый рендер. StrictMode в dev вызывает функции компонентов (и инициализаторы, редьюсеры) дважды, чтобы побочные эффекты в рендере стали заметны.
Варианты ответа
- Это баг: компонент рендерится повторно из-за лишнего setState
- StrictMode включает конкурентный режим, а он рендерит дважды
- Так происходит и в продакшене, отключить двойной вызов нельзя
- React нарочно вызывает компонент дважды, ища нечистый рендерправильный ответ
Разбор
StrictMode в dev вызывает функции компонентов (и инициализаторы, редьюсеры) дважды, чтобы побочные эффекты в рендере стали заметны. В продакшен-сборке двойного вызова нет. Лишнего setState тут нет, и конкурентный рендер сам по себе ничего не дублирует.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.