Was ist eine Server Action?
Teil des Abschnitts Next.js Essentials der React-Journey von Coddy. Lektion 29 von 47.
Sie können jetzt Daten auf dem Server lesen. Zeit für die andere Hälfte: sie zu ändern.
Bis vor Kurzem erforderte das Speichern einer einzelnen Textzeile überraschend viel Aufwand. Man schrieb einen Endpunkt:
// app/api/items/route.js
export async function POST(request) {
const body = await request.json();
saveItem(body.text);
return Response.json({ ok: true });
}…und diese dann vom Browser aus aufgerufen:
await fetch('/api/items', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ text }),
});Zwei Dateien, eine URL, eine method, headers und JSON in beide Richtungen, um einen String von einem form in eine Datenbank zu übertragen.
Eine Server Action löscht alles davon. Schreibe eine asynchrone Funktion in eine Datei, deren erste Zeile 'use server' ist:
// app/actions.js
'use server';
import { saveItem } from '../lib/db';
export async function addItem(formData) {
saveItem(formData.get('text'));
}…und übergib diese Funktion an ein Formular:
<form action={addItem}>
<input name="text" />
<button type="submit">Add</button>
</form>Das ist schon alles. Drei Details sind erwähnenswert:
'use server'muss die erste Zeile der Datei sein: dieselbe Art von Marker wie'use client', nur in die andere Richtung. Er besagt: Alles, was hier exportiert wird, läuft auf dem Server.- Der
bodyderfunctionerreicht niemals den Browser. Ihre Datenbank-Zugangsdaten sind darin sicher: Der Browser erhält nur eine Referenz, die er aufrufen kann. - Sie haben nie eine URL geschrieben. Next.js erstellt den Endpunkt für Sie;
action={addItem}ist die Verknüpfung.
Ein Unterschied zu den Grundlagen: Diese Formulareingaben sind uncontrolled. Kein useState, kein value, kein onChange: Der Browser speichert den Text, und über das name-Attribut findet die Action ihn beim Absenden.
Probier es selbst
Diese Lektion enthält keine Programmieraufgabe.
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Next.js Essentials
4Server & Client
Zwei Arten von KomponentenDen Fehler lesenDie Zeile „use client“Client-Teile klein haltenServer innerhalb des ClientsRückblick: Server & Client7Clientseitige Navigation
Der aktive LinkProgrammatisches RoutingFiltern mit der URLRoute-HandlerRückblick: Navigation2Routing & Links
Ordner sind RoutenVerschachtelte RoutenSeiten verknüpfenDynamische RoutenNicht-gefunden-SeitenRückblick: Routing3Layouts & Metadaten
Das Root-LayoutGemeinsame NavigationVerschachtelte LayoutsSeitenmetadatenDynamische MetadatenRückblick: Layouts6Server Actions
Was ist eine Server Action?Formulare, die handelnFormulardaten lesenDie Seite aktualisierenRückblick: Server Actions