Выбор ответа Middle Эффекты и жизненный цикл спрашивают часто обновлено
Порядок очистки при смене зависимости
Вопрос
Компонент отрендерился с id = 1, затем проп сменился на 2. Что появится в консоли после смены (без StrictMode)?
useEffect(() => {
console.log('effect', id);
return () => console.log('cleanup', id);
}, [id]);
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: cleanup 1, effect 2. Перед повторным запуском React вызывает очистку предыдущего эффекта, а она замкнула старое значение id = 1.
Варианты ответа
cleanup 1,effect 2правильный ответeffect 2,effect 1cleanup 2,effect 2effect 2,cleanup 1
Разбор
Перед повторным запуском React вызывает очистку предыдущего эффекта, а она замкнула старое значение id = 1. Затем запускается новый эффект с id = 2. Без очистки в выводе осталась бы утечка подписки, а старый эффект повторно не запускается. cleanup 2 неверно: очистка видит значения своего рендера. Очистка не идёт после нового эффекта.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.