# Next.js 16 Server Actions 2026: Mutationen, Revalidierung und Interview-Fragen > Wie Next.js 16 Server Actions Mutationen, Revalidierung, Pending-State, optimistische UI und Sicherheit handhaben – mit den Interview-Fragen zu jedem Konzept. - Published: 2026-06-24 - Updated: 2026-07-06 - Author: SharpSkill - Tags: next.js, server-actions, react, mutations, revalidation, interview - Reading time: 11 min --- Next.js Server Actions verwandeln eine einfache asynchrone Funktion in einen serverseitigen Mutations-Endpunkt, den ein Formular direkt aufrufen kann – ohne API-Route, ohne Client-`fetch` und ohne manuelle JSON-Serialisierung. In Next.js 16 sind sie der Standardweg, um Daten-Mutationen zu schreiben, und sie tauchen 2026 in nahezu jedem Senior-React-Interview auf. Diese ausführliche Analyse zeigt, wie sie ausgeführt werden, wie Revalidierung frische Daten an die UI weitergibt, wie sich Pending- und Fehlerzustände modellieren lassen und welche Sicherheitsregeln die meisten Entwickler übersehen. > **Definition in einem Satz** > > Eine Server Action ist eine asynchrone Funktion, die mit `"use server"` markiert ist, ausschließlich auf dem Server läuft und aus einer Client-Komponente oder einem Formular heraus aufgerufen werden kann, als wäre sie lokal – während Next.js den Netzwerk-Request, die Serialisierung der Argumente und den CSRF-Schutz automatisch übernimmt. ## Wie Server Actions unter der Haube ausgeführt werden Eine Server Action ist eine reine Server-Funktion, die über das Netzwerk mithilfe eines vom Compiler generierten Endpunkts aufgerufen wird. Trägt eine Funktion die Direktive `"use server"`, liefert der Next.js-Compiler ihren Rumpf niemals an den Browser aus. Stattdessen ersetzt er die Funktion durch eine leichtgewichtige Referenz: eine gehashte Action-ID, die auf eine generierte POST-Route abgebildet wird. Ein Aufruf der Action vom Client sendet eine Anfrage an diese Route, die eigentliche Funktion läuft auf dem Server, und das serialisierte Ergebnis wird zurück an den Aufrufer gestreamt. Dieses Design hat drei Konsequenzen, die sich sowohl für Produktionscode als auch für Interviews zu merken lohnen. Erstens müssen Argumente und Rückgabewerte serialisierbar sein, da sie als kodierte Payloads das Netzwerk überqueren. Zweitens bleiben Geheimnisse auf dem Server, weil der Funktionsrumpf niemals für den Client gebündelt wird. Drittens funktionieren Actions, die an ein `
` gebunden sind, bereits vor der Hydration – weshalb Progressive Enhancement ein zentrales Verkaufsargument ist. Der offizielle [Next.js-Leitfaden zum Aktualisieren von Daten](https://nextjs.org/docs/app/getting-started/updating-data) dokumentiert das vollständige Ausführungsmodell. Jede Server Action lebt in einer Datei oder einem Block, der mit `"use server"` markiert ist. Eine einzelne Mutation sieht so aus: ```typescript // app/posts/actions.ts "use server" import { revalidatePath } from "next/cache" import { redirect } from "next/navigation" import { PostService } from "@/lib/services/post-service" export async function createPost(formData: FormData) { // FormData values arrive as strings; cast explicitly const title = formData.get("title") as string const body = formData.get("body") as string // Run business logic through the service layer, never the ORM directly const post = await PostService.create({ title, body }) // Purge the cached list so the next request refetches it revalidatePath("/posts") // Send the user to the freshly created resource redirect(`/posts/${post.id}`) } ``` Die Funktion liest die übermittelten `FormData`, persistiert über einen Service, invalidiert die zwischengespeicherte Liste und leitet weiter. Dafür ist kein Client-JavaScript nötig. ## Eine Server Action ohne Client-JavaScript an ein Formular anbinden Die Action an das `action`-Prop eines Formulars zu übergeben ist die einfachste Integration. Next.js serialisiert die Übermittlung in `FormData` und ruft die Funktion auf dem Server auf. Da hierbei der native Mechanismus zur Formularübermittlung genutzt wird, funktioniert es auch mit deaktiviertem JavaScript und wird nahtlos aufgewertet, sobald die Seite hydriert. ```tsx // app/posts/new-post-form.tsx import { createPost } from "./actions" export default function NewPostForm() { return (