0Pricing
React Academy · Урок

Действия форм: замена маршрутов API для мутаций

Подключите серверные действия напрямую к действиям HTML-форм, чтобы выполнять мутации форм без шаблонного кода и с полной повторной проверкой данных

«Действия форм: замена маршрутов API для мутаций» — бесплатный урок React Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.

Традиционный подход

В традиционных приложениях Next.js отправка форм требует клиентского компонента с обработчиком onSubmit, который вызывает fetch() для отправки данных методом POST на маршрут API. Этот подход работает, но требует отдельно писать и поддерживать логику получения данных на клиенте и обработчик маршрута на сервере.

Серверные действия упрощают работу с формами

С серверными действиями Вы заменяете вызов функции получения данных и маршрут API одной функцией. Элемент формы получает серверное действие в качестве свойства action: <form action={serverAction}>. React перехватывает отправку и автоматически вызывает действие с данными формы.

Доступ к полям формы с помощью FormData

При вызове из формы серверное действие автоматически получает объект FormData в качестве аргумента. Вы обращаетесь к отдельным полям с помощью formData.get('email'), который возвращает значение в виде строки. Доступны все стандартные методы FormData, включая getAll() для полей с множественным выбором.

Возврат результатов из действий

Серверное действие может возвращать сериализуемое значение, которое использует клиент. Возврат объекта ошибки, например { error: 'Email already exists' }, или флага успешного выполнения, например { success: true }, позволяет клиенту соответствующим образом обновить интерфейс без полной перезагрузки страницы.

Компоненты страниц остаются простыми

Поскольку действием формы является серверное действие, компонент страницы, содержащий форму, не обязан быть клиентским компонентом. Сервер отображает форму в виде статического HTML, а только интерактивным частям, например отображению ошибок, требуется JavaScript на стороне клиента. Это значительно уменьшает размер клиентской сборки.

Встроенное прогрессивное улучшение

Форма с action={serverAction} работает даже при отключенном JavaScript. Браузер выполняет стандартную отправку формы HTML методом POST, сервер выполняет действие, а затем возвращает обновленную страницу. Благодаря этому настоящему прогрессивному улучшению форма корректно работает в любых средах.

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

После того как серверное действие изменяет данные, кэшированные данные страницы необходимо обновить. Вызов revalidatePath('/dashboard') внутри действия делает кэш Next.js для этого пути недействительным, поэтому при следующем запросе загружаются свежие данные. Это стандартный способ поддерживать актуальность страниц, отображаемых на сервере, после изменения данных.

Точечная инвалидация кэша

revalidateTag('user-data') обеспечивает более точечную инвалидацию кэша, чем revalidatePath. Вы добавляете метки к вызовам получения данных с помощью next: { tags: ['user-data'] }, а затем из серверного действия одновременно делаете недействительными все данные с этой меткой, независимо от того, на каких путях они отображаются.

Перенаправление после действия

После успешного изменения данных серверные действия могут перенаправить пользователя на новую страницу с помощью вызова redirect('/success') из модуля next/navigation. Это перенаправление обрабатывается на сервере, поэтому браузер получает корректный ответ навигации, а не перенаправление на стороне клиента.

Изменение данных вне формы с помощью startTransition

Серверные действия не ограничиваются отправкой форм. Для нажатий кнопок и других событий вне формы оберните вызов действия в startTransition(() => action(arg)). Это помечает навигацию как переход и позволяет React сохранять текущий интерфейс видимым, пока действие выполняется на сервере.

Проверка данных внутри действий

Серверные действия — подходящее место для проверки данных на сервере. Проверьте поля FormData, верните ошибки проверки, если они обнаружены, и продолжайте изменение данных только в том случае, если все поля корректны. Библиотеки вроде Zod хорошо подходят для этой задачи: преобразуйте FormData в типизированную схему и при ошибке верните карту ошибок.

Вопрос о FormData

Что получает серверное действие в качестве аргумента при вызове в результате отправки формы?

Повторение урока

Серверные действия заменяют подход с запросом данных и маршрутом API при изменении данных через формы. Свойство формы action напрямую принимает серверное действие, которое получает объект FormData. Действия возвращают сериализуемые результаты для обновления интерфейса клиента, поддерживают revalidatePath и revalidateTag для инвалидации кэша и постепенно работают даже без JavaScript.

Часто задаваемые вопросы

Урок «Действия форм: замена маршрутов API для мутаций» бесплатный?

Да — полный текст урока «Действия форм: замена маршрутов API для мутаций» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.

Чему я научусь в уроке «Действия форм: замена маршрутов API для мутаций»?

Подключите серверные действия напрямую к действиям HTML-форм, чтобы выполнять мутации форм без шаблонного кода и с полной повторной проверкой данных Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать React Academy?

Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Действия форм: замена маршрутов API для мутаций»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке React Academy?

Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Серверные действия в React 19 и Next.js
  2. Действия форм: замена маршрутов API для мутаций
  3. useActionState и useFormStatus
  4. Прогрессивное улучшение с серверными действиями
← Назад к React Academy