0Pricing
React Academy · Урок

Действия React и useActionState

Определяйте серверные и клиентские действия, обрабатывайте отправку форм и отслеживайте состояния ожидания.

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

Добро пожаловать

В этом уроке Вы определите действия React 19, используете useActionState для управления состоянием отправки формы и аккуратно обработаете состояния ожидания и ошибки.

Что такое действия React?

Действия — это асинхронные функции, которые Вы передаёте свойству `action` формы (или `formAction` кнопки). React 19 обрабатывает их особым образом: отслеживает состояние ожидания, обрабатывает ошибки и автоматически интегрируется с переходами.

Серверные действия в Next.js

В Next.js с маршрутизатором App Router добавьте 'use server' в начало функции, чтобы сделать её серверным действием. React вызывает её на сервере при отправке формы — маршрут API не требуется.
'use server';

export async function createPost(formData) {
  const title = formData.get('title');
  await db.insert(posts).values({ title });
  revalidatePath('/posts');
}

Использование действия в форме

Передайте серверное или клиентское действие непосредственно свойству `action` формы. При отправке формы React вызывает его с объектом FormData.
import { createPost } from './actions';

export default function NewPostForm() {
  return (
    <form action={createPost}>
      <input name="title" />
      <button type="submit">Create</button>
    </form>
  );
}

useActionState

useActionState оборачивает действие и предоставляет текущее состояние (результат последнего действия) и логическое значение состояния ожидания. Обёрнутая функция передаётся в свойство действия формы.
'use client';
import { useActionState } from 'react';
import { createPost } from './actions';

function NewPostForm() {
  const [state, action, isPending] = useActionState(createPost, null);
  return (
    <form action={action}>
      {state?.error && <p>{state.error}</p>}
      <input name="title" />
      <button disabled={isPending}>Create</button>
    </form>
  );
}

Действие, возвращающее состояние

При использовании с useActionState серверное действие получает `(prevState, formData)`. Верните объект с информацией об успешном выполнении или ошибке — он станет новым состоянием.
'use server';

export async function createPost(prevState, formData) {
  const title = formData.get('title')?.toString();
  if (!title) return { error: 'Title is required' };
  await db.insert(posts).values({ title });
  return { success: true };
}

isPending для отключения отправки

Используйте значение isPending из useActionState, чтобы отключить кнопку отправки и показать индикатор загрузки, пока выполняется действие.
<button type="submit" disabled={isPending}>
  {isPending ? 'Saving...' : 'Save'}
</button>

Клиентские действия

Действия не обязательно должны выполняться на сервере. Клиентское действие — это обычная асинхронная функция без 'use server'. При этом оно всё равно получает управление состоянием и состоянием ожидания от useActionState.
async function clientAction(prevState, formData) {
  const res = await fetch('/api/post', {
    method: 'POST', body: formData,
  });
  if (!res.ok) return { error: 'Failed' };
  return { success: true };
}

useFormStatus для дочерних компонентов

Во вложенной кнопке отправки используйте `useFormStatus()`, чтобы прочитать состояние ожидания родительской формы без передачи свойств через всю цепочку компонентов.
'use client';
import { useFormStatus } from 'react-dom';

function SubmitButton() {
  const { pending } = useFormStatus();
  return <button disabled={pending}>Submit</button>;
}

Постепенное улучшение

Действия React с серверными действиями работают даже без JavaScript (постепенное улучшение). Браузер отправляет обычный запрос POST формы обработчику Next.js, поэтому функция доступна ещё до загрузки JS.

Быстрая проверка

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

Повторение

Действия React — это асинхронные функции, передаваемые в действие формы. useActionState оборачивает действие и предоставляет состояние, обёрнутую функцию действия и isPending. Серверные действия дополняются 'use server' и выполняются на сервере.

Далее

Следующий урок: **useOptimistic для мгновенной обратной связи** — Вы научитесь отображать оптимистичные обновления интерфейса, пока выполняется мутация на сервере.

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

Урок «Действия React и useActionState» бесплатный?

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

Чему я научусь в уроке «Действия React и useActionState»?

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

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

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

Сколько времени занимает урок «Действия React и useActionState»?

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

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

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

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

  1. Компоненты React на сервере
  2. Хук use() для асинхронных ресурсов
  3. Действия React и useActionState
  4. useOptimistic для мгновенной обратной связи
← Назад к React Academy