Выбор ответа Middle Рендер и reconciliation обновлено
Сбросить state при смене id
Вопрос
Компонент <EditProfile userId={id} /> хранит черновик формы в state. При переходе к другому пользователю черновик должен сброситься. Какой способ самый простой и идиоматичный?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Передать key={userId}, чтобы создать новый экземпляр. Смена key заставляет React размонтировать старый экземпляр и смонтировать новый с начальным state, без лишнего рендера со старыми данными.
Варианты ответа
useEffect(() => setDraft(initial), [userId])- Передать
key={userId}, чтобы создать новый экземплярправильный ответ - Обернуть компонент в
memoс компаратором поuserId - Хранить черновик в
useRefи сбрасывать поuserId
Разбор
Смена key заставляет React размонтировать старый экземпляр и смонтировать новый с начальным state, без лишнего рендера со старыми данными. Вариант с эффектом работает, но сначала отрисует старый черновик, а затем сделает ещё один рендер. memo не сбрасывает state. useRef не вызывает рендер и проблему не решает.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.