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

Отправка формы через эффект

Вопрос

Разработчик ставит флаг submitted в обработчике и отправляет POST в эффекте, который зависит от submitted. Что лучше?

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

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

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

Коротко

Правильный ответ: Отправлять POST в обработчике: запрос вызван действием, а не показом. Эффекты нужны для синхронизации с тем, что отображается.

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

  1. Так и надо: сетевые запросы делаются в эффектах, а не в обработчиках
  2. Отправлять POST в обработчике: запрос вызван действием, а не показомправильный ответ
  3. Перенести запрос в тело компонента, чтобы он шёл сразу при рендере
  4. Использовать useLayoutEffect, чтобы запрос ушёл раньше отрисовки

Разбор

Эффекты нужны для синхронизации с тем, что отображается. Запрос, вызванный конкретным действием, должен жить в обработчике события: так нет лишнего рендера и не будет повторной отправки при повторном монтировании или в StrictMode. В теле компонента запросы делать нельзя, рендер должен быть чистым. useLayoutEffect проблему не меняет.

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

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