Menu
Coddy logo textTech

Qu'est-ce qu'une Server Action

Fait partie de la section L'essentiel de Next.js du Journey React de Coddy — leçon 29 sur 47.

Vous pouvez maintenant lire les données sur le server. Il est temps d'aborder l'autre moitié : les modifier.

Jusqu'à récemment, enregistrer une ligne de texte nécessitait une quantité surprenante de cérémonial. Vous écriviez un endpoint :

// app/api/items/route.js
export async function POST(request) {
    const body = await request.json();
    saveItem(body.text);
    return Response.json({ ok: true });
}

…puis l'avons appelée depuis le navigateur :

await fetch('/api/items', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ text }),
});

Deux fichiers, une URL, une méthode, des headers, et du JSON dans les deux sens, pour déplacer une chaîne de caractères d'un form à une base de données.

Une Server Action supprime tout cela. Écrivez une fonction async dans un fichier dont la première ligne est 'use server' :

// app/actions.js
'use server';

import { saveItem } from '../lib/db';

export async function addItem(formData) {
    saveItem(formData.get('text'));
}

…et passer cette fonction à un formulaire :

<form action={addItem}>
    <input name="text" />
    <button type="submit">Add</button>
</form>

C'est tout ce qu'il y a à faire. Trois détails méritent d'être soulignés :

  • 'use server' doit être la première ligne du fichier : c'est le même type de marqueur que 'use client', mais dans le sens inverse. Il indique que tout ce qui est exporté ici s'exécute sur le server.
  • Le body de la function n'atteint jamais le navigateur. Vos identifiants de base de données y sont en sécurité : le navigateur ne reçoit qu'une référence qu'il peut appeler.
  • Vous n'avez jamais écrit d'URL. Next.js crée le point de terminaison pour vous ; action={addItem} fait le raccordement.

Un contraste avec Fundamentals : ces champs de form sont non contrôlés. Pas de useState, pas de value, pas de onChange : le navigateur conserve le text, et l'attribut name est la façon dont l'action le trouve lors du submit.

Essayez vous-même

Cette leçon ne comprend pas de défi de code.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de L'essentiel de Next.js