Выбор ответа Middle Эффекты и жизненный цикл обновлено
Отправка формы через эффект
Вопрос
Разработчик ставит флаг submitted в обработчике и отправляет POST в эффекте, который зависит от submitted. Что лучше?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Отправлять POST в обработчике: запрос вызван действием, а не показом. Эффекты нужны для синхронизации с тем, что отображается.
Варианты ответа
- Так и надо: сетевые запросы делаются в эффектах, а не в обработчиках
- Отправлять POST в обработчике: запрос вызван действием, а не показомправильный ответ
- Перенести запрос в тело компонента, чтобы он шёл сразу при рендере
- Использовать
useLayoutEffect, чтобы запрос ушёл раньше отрисовки
Разбор
Эффекты нужны для синхронизации с тем, что отображается. Запрос, вызванный конкретным действием, должен жить в обработчике события: так нет лишнего рендера и не будет повторной отправки при повторном монтировании или в StrictMode. В теле компонента запросы делать нельзя, рендер должен быть чистым. useLayoutEffect проблему не меняет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.