0Pricing
React Academy · Lezione

React Actions e useActionState

Definisca action server e client, gestisca l'invio dei form e monitori gli stati pending.

React Actions e useActionState è una lezione React Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento React Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso React Academy include 4 lezioni in totale.

Benvenuto

In questa lezione definirà le Actions di React 19, utilizzerà useActionState per gestire lo stato di invio di un modulo e gestirà in modo chiaro gli stati di attesa e di errore.

Che cosa sono le React Actions?

Le Actions sono funzioni asincrone da passare alla prop `action` del modulo (o a `formAction` del pulsante). React 19 le gestisce in modo speciale: tiene traccia dello stato di attesa, gestisce gli errori e si integra automaticamente con le Transitions.

Server Actions in Next.js

In Next.js con App Router, aggiunga 'use server' all'inizio di una funzione per trasformarla in una Server Action. React la esegue sul server quando viene inviato un modulo, senza bisogno di una route API.
'use server';

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

Utilizzare un'Action in un modulo

Passi direttamente l'azione server o client alla prop `action` del modulo. React la chiama con il FormData quando il modulo viene inviato.
import { createPost } from './actions';

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

useActionState

useActionState avvolge un'azione per fornirle lo stato corrente, ovvero il risultato dell'ultima azione, e un valore booleano che indica lo stato di attesa. La funzione avvolta viene passata a form action.
'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>
  );
}

Un'Action che restituisce lo stato

La Server Action riceve `(prevState, formData)` quando viene utilizzata con useActionState. Restituisca un oggetto con le informazioni su successo o errore: questo diventerà il nuovo stato.
'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 per disabilitare l'invio

Utilizzi il valore isPending fornito da useActionState per disabilitare il pulsante di invio e mostrare un indicatore di caricamento mentre l'azione è in esecuzione.
<button type="submit" disabled={isPending}>
  {isPending ? 'Saving...' : 'Save'}
</button>

Client Actions

Le Actions non devono necessariamente essere eseguite sul server. Una client action è una normale funzione asincrona senza 'use server'. Riceve comunque la gestione di stato e di attesa fornita da 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 per i componenti figli

In un pulsante di invio profondamente annidato, utilizzi `useFormStatus()` per leggere lo stato di attesa del modulo padre senza dover passare le prop attraverso tutti i componenti.
'use client';
import { useFormStatus } from 'react-dom';

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

Progressive Enhancement

Le React Actions con le Server Actions funzionano anche senza JavaScript, grazie al progressive enhancement. Il browser invia una richiesta POST nativa del modulo al gestore di Next.js, rendendo la funzionalità operativa prima del caricamento di JavaScript.

Verifica rapida

Che cosa restituisce useActionState per consentire di mostrare uno stato di caricamento mentre è in esecuzione un'azione del modulo?

Riepilogo

Le React Actions sono funzioni asincrone passate alla action del modulo. useActionState avvolge un'azione per fornire lo stato, una funzione d'azione avvolta e isPending. Le Server Actions aggiungono 'use server' ed eseguono l'azione sul server.

Prossimo argomento

Prossima lezione: **useOptimistic for Instant Feedback** — mostrerà aggiornamenti ottimistici dell'interfaccia mentre una mutazione del server è in corso.

Domande Frequenti

La lezione «React Actions e useActionState» è gratuita?

Sì — il testo completo di «React Actions e useActionState» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso React Academy, passa a CoddyKit PRO. Il corso React Academy include 4 lezioni in totale.

Cosa imparerò in «React Actions e useActionState»?

Definisca action server e client, gestisca l'invio dei form e monitori gli stati pending. Eserciti React Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare React Academy?

Non è richiesta alcuna esperienza precedente. React Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «React Actions e useActionState»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione React Academy?

Sì. Ogni lezione React Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. React Server Components: spiegazione
  2. L'hook use() per le risorse asincrone
  3. React Actions e useActionState
  4. useOptimistic per feedback immediati
← Torna a React Academy