React Academy · leksjon

useActionState og useFormStatus

Bruk useActionState til å spore ventetilstand og feil, og useFormStatus til å deaktivere sendeknapper under innsending.

Leksjon 3 av 413 trinn

useActionState og useFormStatus er en gratis leksjon i React Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i React Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i React Academy inneholder totalt 4 leksjoner.

Introduksjon til useActionState

useActionState(action, initialState) er en React 19-hook som pakker inn en Server Action for å spore tilstanden på tvers av innsendinger. Den tar action-funksjonen og en startverdi for tilstanden som argumenter, og returnerer en tuppel du kan bruke til å styre hele skjemaforløpet.

Returtuppelen

Hooken returnerer [state, formAction, isPending]. state inneholder den siste returverdien fra Server Action-en og starter som null eller startverdien din. formAction er den innpakkede actionen som skal sendes til skjemaet. isPending er true mens actionen kjører på serveren.

Spore tilstand mellom innsendinger

Hver gang skjemaet sendes inn, kjøres Server Action-en, og returverdien blir den nye state. Ved første gjengivelse er state lik initialState. Dette gjør det enkelt å vise forskjellig brukergrensesnitt avhengig av om det har vært tidligere innsendinger, og hva de returnerte.

Vise innebygde valideringsfeil

Hvis Server Action-en returnerer { errors: { email: 'Invalid email' } }, kan du vise feilen direkte i skjemaet: {state.errors?.email && <p>{state.errors.email}</p>}. Fordi tilstanden bevares mellom nye gjengivelser, forblir feilmeldingen synlig til neste vellykkede innsending erstatter tilstanden.

Vise suksessmeldinger

Når actionen returnerer { success: true }, kan komponenten vise en suksessmelding: {state?.success && <p>Form submitted!</p>}. Skjemaet kan skjules eller erstattes av suksessmeldingen basert på tilstandsverdien.

Introduksjon til useFormStatus

useFormStatus() er en hook som leser ventetilstanden til det nærmeste overordnede <form>-elementet. Den returnerer et objekt som blant annet inneholder { pending: boolean }. Denne hooken må brukes i en komponent som er underordnet skjemaet — ikke i komponenten som selv gjengir skjemaet.

Hvorfor det finnes en plasseringsbegrensning

Begrensningen om at useFormStatus må brukes inne i skjemaet, finnes fordi hooken leser skjemaets kontekst fra React-treet over seg. Hvis den kalles i den samme komponenten som gjengir skjemaet, ville den vært et søsken til skjemaet, ikke en underordnet komponent, og ville ikke hatt tilgang til skjemaets tilstand.

Opprette en sendeknappkomponent

Standardmønsteret er å trekke sendeknappen ut i en egen komponent: function SubmitButton() { const { pending } = useFormStatus(); return <button disabled={pending}>Submit</button>; }. Denne komponenten plasseres deretter inne i skjemaet, slik at den får tilgang til skjemaets ventetilstand.

Deaktivere sendeknappen

Hvis du setter disabled={pending} på sendeknappen, forhindrer du doble innsendinger. Når brukeren klikker på sendeknappen og Server Action-en kjører, er pending lik true, og knappen blir deaktivert og kan ikke klikkes. Når actionen er fullført, blir pending false igjen, og knappen aktiveres på nytt.

Kombinere begge hookene

Det fullstendige UX-mønsteret for skjemaer kombinerer begge hookene: useActionState i skjemakomponenten sporer resultatet av actionen og gir formAction, mens useFormStatus inne i en underordnet SubmitButton-komponent sporer ventetilstanden. Sammen gir de visning av valideringsfeil og en responsiv sendeknapp.

Optimistisk UI med useOptimistic

For en enda mer responsiv opplevelse kan useOptimistic kombineres med useActionState. Du oppdaterer brukergrensesnittet umiddelbart med det forventede resultatet før serveren svarer, og samordner det deretter når det faktiske svaret kommer. Dette mønsteret er vanlig i likerknapper, todo-lister og andre interaksjoner som gir rask tilbakemelding.

Plassering av useFormStatus

Hvor må useFormStatus kalles for at den skal fungere riktig?

Oppsummering av leksjonen

useActionState(action, initialState) returnerer [state, formAction, isPending] for å spore resultater fra Server Actions. Tilstanden inneholder actionens returverdi, slik at du kan vise feil og suksesser direkte i skjemaet. useFormStatus() gir { pending } i underordnede komponenter i skjemaet, slik at du kan lage responsive sendeknapper. Sammen gir hookene en komplett og tilgjengelig skjemaløsning.

Gratis å komme i gang

Lær deg React med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
88
Leksjoner
324

Ofte stilte spørsmål

Er leksjonen «useActionState og useFormStatus» gratis?

Ja – hele teksten i «useActionState og useFormStatus» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av React Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i React Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «useActionState og useFormStatus»?

Bruk useActionState til å spore ventetilstand og feil, og useFormStatus til å deaktivere sendeknapper under innsending. Du øver på React Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med React Academy?

Ingen tidligere erfaring er nødvendig. React Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «useActionState og useFormStatus»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne React Academy-leksjonen?

Ja. Alle React Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Server Actions i React 19 og Next.js
  2. Skjemaactions: Erstatt API-ruter for mutasjoner
  3. useActionState og useFormStatus
  4. Progressiv forbedring med Server Actions
← Tilbake til React Academy