Hook-ul useActionState în React 19: Mutații Asincrone și Starea Formularului în React & Next.js

Ghid complet pentru hook-ul useActionState din React 19: gestionarea formularelor native, actualizarea stării după acțiuni asincrone și indicatorul automat isPending.

Sintaxă
const [state, formAction, isPending] = useActionState(actionFn, initialState, permalink?);

Hook-ul useActionState este mecanismul oficial din React 19 (evoluția stabilă a fostului hook experimental useFormState) conceput pentru a simplifica radical mutațiile asincrone și manipularea formularelor HTML native.

Acesta leagă o funcție de acțiune (care poate fi o acțiune pe server – Server Action – sau o funcție asincronă de client) de starea formularului, returnând automat noua stare rezultată, funcția acțiune împachetată pentru atributul action al formularului și un indicator boolean isPending care indică dacă operațiunea este în curs de desfășurare.

Trimiterea unui formular de contact cu useActionState
import { useActionState } from 'react';

// Funcție asincronă de mutație (primește starea anterioară și obiectul FormData):
async function actualizeazaProfil(stareAnterioara, formData) {
  const nume = formData.get('nume');
  
  if (!nume || nume.trim().length < 3) {
    return { succes: false, eroare: 'Numele trebuie să aibă minimum 3 caractere.' };
  }

  try {
    // Simularea trimiterii către server:
    await new Promise(resolve => setTimeout(resolve, 800));
    return { succes: true, mesaj: `Profil actualizat cu succes pentru ${nume}!` };
  } catch (err) {
    return { succes: false, eroare: 'A apărut o eroare la salvare.' };
  }
}

export default function FormularProfil() {
  const [stare, trimiteActiune, esteInCurs] = useActionState(actualizeazaProfil, {
    succes: false,
    mesaj: '',
    eroare: ''
  });

  return (
    <form action={trimiteActiune}>
      <label htmlFor="nume">Nume complet:</label>
      <input type="text" id="nume" name="nume" disabled={esteInCurs} />

      <button type="submit" disabled={esteInCurs}>
        {esteInCurs ? 'Se salvează datele...' : 'Salvează Profil'}
      </button>

      {stare.eroare && <p className="eroare">{stare.eroare}</p>}
      {stare.succes && <p className="succes">{stare.mesaj}</p>}
    </form>
  );
}
Element returnat Tip de date Rol
state Any Valoarea curentă a stării rezultate în urma celei mai recente execuții a acțiunii.
formAction Function Funcția care se transmite direct la atributul <form action={formAction}> sau pe un buton.
isPending Boolean Devine true imediat ce s-a inițiat trimiterea și revine la false după finalizare.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: Hook-ul useActionState în React 19: Mutații Asincrone și Starea Formularului

Ai o nelămurire despre utilizarea comenzii Hook-ul useActionState în React 19: Mutații Asincrone și Starea Formularului sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.