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

Порядок очистки при смене зависимости

Вопрос

Компонент отрендерился с id = 1, затем проп сменился на 2. Что появится в консоли после смены (без StrictMode)?

useEffect(() => {
  console.log('effect', id);
  return () => console.log('cleanup', id);
}, [id]);

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

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

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

Коротко

Правильный ответ: cleanup 1, effect 2. Перед повторным запуском React вызывает очистку предыдущего эффекта, а она замкнула старое значение id = 1.

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

  1. cleanup 1, effect 2правильный ответ
  2. effect 2, effect 1
  3. cleanup 2, effect 2
  4. effect 2, cleanup 1

Разбор

Перед повторным запуском React вызывает очистку предыдущего эффекта, а она замкнула старое значение id = 1. Затем запускается новый эффект с id = 2. Без очистки в выводе осталась бы утечка подписки, а старый эффект повторно не запускается. cleanup 2 неверно: очистка видит значения своего рендера. Очистка не идёт после нового эффекта.

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

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