0Pricing
React Academy · Leçon

Actions React et useActionState

Définissez des actions serveur et client, gérez les envois de formulaires et suivez les états en attente.

Actions React et useActionState est une leçon React Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage React Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours React Academy comprend 4 leçons au total.

Bienvenue

Dans cette leçon, vous définirez les actions de React 19, utiliserez useActionState pour gérer l’état de soumission d’un formulaire et gérerez proprement les états d’attente et d’erreur.

Que sont les actions React ?

Les actions sont des fonctions asynchrones que vous transmettez à la propriété `action` d’un formulaire (ou à `formAction` d’un bouton). React 19 les traite spécialement : il suit l’état d’attente, gère les erreurs et s’intègre automatiquement aux transitions.

Actions serveur dans Next.js

Dans Next.js avec l’App Router, ajoutez 'use server' au début d’une fonction pour en faire une action serveur. React l’appelle sur le serveur lorsqu’un formulaire est soumis : aucune route d’API n’est nécessaire.
'use server';

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

Utiliser une action avec un formulaire

Transmettez directement l’action côté serveur ou côté client à la propriété `action` du formulaire. React l’appelle avec les FormData lorsque le formulaire est soumis.
import { createPost } from './actions';

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

useActionState

useActionState encapsule une action pour vous fournir l’état actuel, c’est-à-dire le dernier résultat de l’action, ainsi qu’un booléen d’attente. La fonction encapsulée est transmise à l’action du formulaire.
'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>
  );
}

Action renvoyant un état

L’action serveur reçoit `(prevState, formData)` lorsqu’elle est utilisée avec useActionState. Renvoyez un objet contenant les informations de réussite ou d’erreur : il devient le nouvel état.
'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 pour désactiver la soumission

Utilisez la valeur isPending de useActionState pour désactiver le bouton de soumission et afficher un indicateur de chargement pendant l’exécution de l’action.
<button type="submit" disabled={isPending}>
  {isPending ? 'Saving...' : 'Save'}
</button>

Actions côté client

Les actions ne sont pas nécessairement exécutées côté serveur. Une action côté client est une fonction asynchrone ordinaire, sans 'use server'. Elle bénéficie tout de même de la gestion de l’état et de l’attente fournie par 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 pour les composants enfants

Dans un bouton de soumission profondément imbriqué, utilisez `useFormStatus()` pour lire l’état d’attente du formulaire parent sans devoir transmettre les propriétés de composant en composant.
'use client';
import { useFormStatus } from 'react-dom';

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

Amélioration progressive

Les actions React avec les actions serveur fonctionnent même sans JavaScript (amélioration progressive). Le navigateur envoie une requête POST de formulaire native au gestionnaire Next.js, ce qui rend la fonctionnalité opérationnelle avant le chargement de JS.

Vérification rapide

Que renvoie useActionState pour vous permettre d’afficher un état de chargement pendant l’exécution d’une action de formulaire ?

Récapitulatif

Les actions React sont des fonctions asynchrones transmises à l’action d’un formulaire. useActionState encapsule une action pour vous fournir l’état, une fonction d’action encapsulée et isPending. Les actions serveur ajoutent 'use server' et s’exécutent sur le serveur.

Ensuite

Prochaine leçon : **useOptimistic pour un retour instantané** — vous afficherez des mises à jour optimistes de l’interface pendant l’exécution d’une mutation côté serveur.

Questions Fréquemment Posées

La leçon « Actions React et useActionState » est-elle gratuite ?

Oui — le texte complet de « Actions React et useActionState » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours React Academy, passe à CoddyKit PRO. Le cours React Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Actions React et useActionState » ?

Définissez des actions serveur et client, gérez les envois de formulaires et suivez les états en attente. Tu pratiques React Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer React Academy ?

Aucune expérience préalable n'est requise. React Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Actions React et useActionState » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon React Academy ?

Oui. Chaque leçon React Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Les composants serveur React expliqués
  2. Le hook use() pour les ressources asynchrones
  3. Actions React et useActionState
  4. useOptimistic pour un retour instantané
← Retour à React Academy