0Pricing
React Academy · Lekcja

Akcje React i useActionState

Definiowanie akcji serwerowych i klienckich, obsługa przesyłania formularzy oraz śledzenie stanów oczekiwania.

Akcje React i useActionState to bezpłatna lekcja React Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.

Wprowadzenie

W tej lekcji zdefiniują Państwo React 19 Actions, użyją useActionState do zarządzania stanem wysyłania formularza oraz przejrzyście obsłużą stany oczekiwania i błędu.

Czym są React Actions?

Actions to funkcje asynchroniczne przekazywane do właściwości `action` formularza (lub `formAction` przycisku). React 19 traktuje je w szczególny sposób: śledzi stan oczekiwania, obsługuje błędy i automatycznie integruje je z Transitions.

Server Actions w Next.js

W Next.js z App Routerem dodaj `'use server'` na początku funkcji, aby przekształcić ją w Server Action. React wywoła ją na serwerze po wysłaniu formularza — nie jest potrzebna trasa API.
'use server';

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

Używanie akcji w formularzu

Przekaż akcję serwerową lub kliencką bezpośrednio do właściwości `action` formularza. Po wysłaniu formularza React wywoła ją z obiektem FormData.
import { createPost } from './actions';

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

useActionState

useActionState opakowuje akcję, udostępniając bieżący stan (wynik ostatniego wywołania akcji) oraz wartość logiczną pending. Opakowana funkcja jest przekazywana do właściwości action formularza.
'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>
  );
}

Akcja zwracająca stan

Server Action otrzymuje `(prevState, formData)`, gdy jest używana z useActionState. Zwróć obiekt z informacjami o powodzeniu lub błędzie — stanie się on nowym stanem.
'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 do wyłączenia przycisku wysyłania

Użyj wartości isPending zwracanej przez useActionState, aby wyłączyć przycisk wysyłania i pokazać wskaźnik ładowania podczas wykonywania akcji.
<button type="submit" disabled={isPending}>
  {isPending ? 'Saving...' : 'Save'}
</button>

Akcje klienckie

Akcje nie muszą działać po stronie serwera. Akcja kliencka to zwykła funkcja asynchroniczna bez `'use server'`. Nadal otrzymuje zarządzanie stanem i oczekiwaniem z 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 w komponentach podrzędnych

W głęboko zagnieżdżonym przycisku wysyłania użyj `useFormStatus()`, aby odczytać stan oczekiwania formularza nadrzędnego bez przekazywania właściwości przez wiele poziomów komponentów.
'use client';
import { useFormStatus } from 'react-dom';

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

Progresywne ulepszanie

React Actions razem z Server Actions działają nawet bez JavaScriptu (progresywne ulepszanie). Przeglądarka wysyła natywne żądanie POST formularza do modułu obsługi Next.js, dzięki czemu funkcja działa jeszcze przed załadowaniem JavaScriptu.

Szybkie sprawdzenie

Co zwraca useActionState, aby można było wyświetlić stan ładowania podczas wykonywania akcji formularza?

Podsumowanie

React Actions to funkcje asynchroniczne przekazywane do właściwości action formularza. useActionState opakowuje akcję i udostępnia stan, opakowaną funkcję akcji oraz isPending. Server Actions wymagają dodania `'use server'` i są wykonywane na serwerze.

Następny temat

Następna lekcja: **useOptimistic for Instant Feedback** — pokażą Państwo optymistyczne aktualizacje interfejsu podczas wykonywania operacji modyfikującej dane na serwerze.

Często zadawane pytania

Czy lekcja „Akcje React i useActionState” jest bezpłatna?

Tak — pełny tekst „Akcje React i useActionState” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Akcje React i useActionState”?

Definiowanie akcji serwerowych i klienckich, obsługa przesyłania formularzy oraz śledzenie stanów oczekiwania. Ćwiczysz React Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć React Academy?

Nie wymagamy żadnego doświadczenia. React Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Akcje React i useActionState”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji React Academy?

Tak. Każda lekcja React Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Komponenty serwerowe React — wyjaśnienie
  2. Hook use() do zasobów asynchronicznych
  3. Akcje React i useActionState
  4. useOptimistic do natychmiastowego sprzężenia zwrotnego
← Powrót do React Academy