React Academy · Lektion

useActionState og useFormStatus

Brug useActionState til at holde styr på ventetilstand og fejl, og useFormStatus til at deaktivere send-knapper under udførelsen.

Lektion 3 af 413 trin

useActionState og useFormStatus er en gratis React Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i React Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. React Academy-kurset indeholder 4 lektioner i alt.

Introduktion til useActionState

useActionState(action, initialState) er en React 19-hook, der omslutter en Server Action for at spore dens tilstand på tværs af afsendelser. Den tager funktionshandlingen og en starttilstand som argumenter og returnerer en tuple, som du kan bruge til at styre hele formularoplevelsen.

Den returnerede tuple

Hooket returnerer [state, formAction, isPending]. state indeholder handlingens seneste returværdi og starter som null eller din startværdi. formAction er den indpakkede handling, som du skal give til formularen. isPending er true, mens handlingen udføres på serveren.

Sporing af tilstand mellem afsendelser

Hver gang formularen sendes, kører Server Action, og dens returværdi bliver den nye state. Ved den første gengivelse er state lig med initialState. Det gør det nemt at vise forskellig brugerflade afhængigt af, om der har været tidligere afsendelser, og hvad de returnerede.

Visning af indlejrede valideringsfejl

Hvis Server Action returnerer { errors: { email: 'Invalid email' } }, kan du vise fejlen direkte i formularen: {state.errors?.email && <p>{state.errors.email}</p>}. Fordi tilstanden bevares på tværs af nye gengivelser, forbliver fejlmeddelelsen synlig, indtil den næste vellykkede afsendelse erstatter tilstanden.

Visning af succesmeddelelser

Når handlingen returnerer { success: true }, kan komponenten gengive en succesmeddelelse: {state?.success && <p>Form submitted!</p>}. Formularen kan skjules betinget eller erstattes af succesmeddelelsen baseret på tilstandsværdien.

Introduktion til useFormStatus

useFormStatus() er en hook, der læser ventetilstanden for det nærmeste overordnede <form>-element. Den returnerer et objekt, der blandt andet indeholder { pending: boolean }. Denne hook skal bruges i en komponent, der er et underordnet element af formularen — ikke i komponenten, der selv gengiver formularen.

Hvorfor placeringsbegrænsningen findes

Begrænsningen om, at useFormStatus skal bruges inde i formularen, findes, fordi hooken læser formularens kontekst fra React-træet over sig. Hvis den blev kaldt i den samme komponent, som gengiver formularen, ville den være et søskendeelement til formularen, ikke en efterkommer, og ville derfor ikke have adgang til formularens tilstand.

Oprettelse af en komponent til indsendelsesknappen

Standardmønstret er at udtrække indsendelsesknappen til sin egen komponent: function SubmitButton() { const { pending } = useFormStatus(); return <button disabled={pending}>Submit</button>; }. Denne komponent placeres derefter inde i formularen, så den får adgang til formularens ventetilstand.

Deaktivering af indsendelsesknappen

Hvis du sætter disabled={pending} på indsendelsesknappen, forhindrer det dobbeltafsendelser. Når du klikker på indsend, og Server Action udføres, er pending true, så knappen deaktiveres og ikke kan klikkes på. Når handlingen er færdig, bliver pending igen false, og knappen aktiveres.

Kombination af begge hooks

Det komplette mønster for formularoplevelsen kombinerer begge hooks: useActionState i formularkomponenten sporer resultatet af handlingen og leverer formAction, mens useFormStatus i en underordnet SubmitButton-komponent sporer ventetilstanden. Sammen giver de valideret visning af fejl og en indsendelsesknap, der reagerer med det samme.

Optimistisk brugerflade med useOptimistic

Hvis du ønsker en endnu mere responsiv oplevelse, kan useOptimistic kombineres med useActionState. Du opdaterer straks brugerfladen med det forventede resultat, før serveren svarer, og afstemmer den derefter, når det faktiske svar ankommer. Dette mønster er almindeligt i knapper til synes godt om, opgavelister og andre interaktioner med hurtig feedback.

Placering af useFormStatus

Hvor skal useFormStatus kaldes, for at det fungerer korrekt?

Opsummering af lektionen

useActionState(action, initialState) returnerer [state, formAction, isPending] for at spore resultater fra Server Actions. Tilstanden indeholder handlingens returværdi, så du kan vise fejl og succes direkte i formularen. useFormStatus() leverer { pending } i underordnede komponenter i formularen, så indsendelsesknapper kan reagere med det samme. Tilsammen skaber de to hooks en komplet og tilgængelig formularoplevelse.

Gratis at komme i gang

Lær React med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
88
Lektioner
324

Ofte stillede spørgsmål

Er lektionen “useActionState og useFormStatus” gratis?

Ja — hele teksten til “useActionState og useFormStatus” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af React Academy-kurset, skal du opgradere til CoddyKit PRO. React Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “useActionState og useFormStatus”?

Brug useActionState til at holde styr på ventetilstand og fejl, og useFormStatus til at deaktivere send-knapper under udførelsen. Du øver dig i React Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på React Academy?

Der kræves ingen tidligere erfaring. React Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “useActionState og useFormStatus”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne React Academy-lektion?

Ja. Alle React Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Server Actions i React 19 og Next.js
  2. Form Actions: Erstatning af API-ruter til mutationer
  3. useActionState og useFormStatus
  4. Progressiv forbedring med Server Actions
← Tilbage til React Academy