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 leserver.- Le
bodyde lafunctionn'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.
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
1Pourquoi Next.js
Ce que Next.js apporteLe dossier AppVotre première pageRécapitulatif : Pourquoi Next.js2Routage et liens
Les dossiers sont des routesRoutes imbriquéesLier des pagesRoutes dynamiquesPages non trouvéesRécapitulatif : Routage3Mises en page et métadonnées
La mise en page racineNavigation partagéeMises en page imbriquéesMétadonnées de pageMétadonnées dynamiquesRécapitulatif : Mises en page6Server Actions
Qu'est-ce qu'une Server ActionDes formulaires interactifsLire les données d'un formulaireActualiser la pageRécapitulatif : Server Actions