# Next.js 16 Server Actions in 2026: mutaties, revalidatie en sollicitatievragen > Hoe Next.js 16 Server Actions omgaan met mutaties, revalidatie, pending-state, optimistische UI en beveiliging, met de sollicitatievragen die elk concept toetsen. - 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 veranderen een gewone async-functie in een server-side mutatie-endpoint dat een formulier rechtstreeks kan aanroepen, zonder API-route, zonder client-`fetch` en zonder handmatige JSON-serialisatie. In Next.js 16 zijn ze de standaardmanier om datamutaties te schrijven en ze duiken op in vrijwel elk senior React-sollicitatiegesprek in 2026. Deze verdieping ontleedt hoe ze uitvoeren, hoe revalidatie verse data naar de UI doorgeeft, hoe pending- en foutstatussen te modelleren zijn en welke beveiligingsregels de meeste ontwikkelaars laten struikelen. > **Definitie in één zin** > > Een Server Action is een async-functie gemarkeerd met `"use server"` die uitsluitend op de server draait en vanuit een client-component of een formulier kan worden aangeroepen alsof ze lokaal is, terwijl Next.js de netwerkaanvraag, argumentserialisatie en CSRF-bescherming automatisch afhandelt. ## Hoe Server Actions onder de motorkap uitvoeren Een Server Action is een uitsluitend server-side functie die via het netwerk wordt aangeroepen door een door de compiler gegenereerd endpoint. Wanneer een functie de `"use server"`-directive draagt, verstuurt de Next.js-compiler de body ervan nooit naar de browser. In plaats daarvan vervangt hij de functie door een lichtgewicht verwijzing: een gehasht action-ID dat wordt gekoppeld aan een gegenereerde POST-route. Het aanroepen van de action vanaf de client stuurt een aanvraag naar die route, de echte functie draait op de server en het geserialiseerde resultaat stroomt terug naar de aanroeper. Dit ontwerp heeft drie gevolgen die het onthouden waard zijn, zowel voor productiecode als voor sollicitatiegesprekken. Ten eerste moeten argumenten en retourwaarden serialiseerbaar zijn, omdat ze als gecodeerde payloads het netwerk oversteken. Ten tweede blijven secrets op de server, aangezien de functie-body nooit voor de client wordt gebundeld. Ten derde werken actions die aan een `
` gekoppeld zijn zelfs vóór hydratie, en dat is precies waarom progressive enhancement een kernargument is. De officiële [Next.js-gids over het bijwerken van data](https://nextjs.org/docs/app/getting-started/updating-data) documenteert het volledige uitvoeringsmodel. Elke Server Action leeft in een bestand of blok dat met `"use server"` is gemarkeerd. Eén enkele mutatie ziet er zo uit: ```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}`) } ``` De functie leest de ingediende `FormData`, slaat op via een service, invalideert het gecachte overzicht en leidt door. Er is nergens client-JavaScript voor nodig. ## Een Server Action aan een formulier koppelen zonder client-JavaScript De action doorgeven aan de `action`-prop van een formulier is de eenvoudigste integratie. Next.js serialiseert de indiening naar `FormData` en roept de functie op de server aan. Omdat dit het native indieningsmechanisme van formulieren gebruikt, functioneert het met uitgeschakelde JavaScript en schakelt het naadloos op zodra de pagina hydrateert. ```tsx // app/posts/new-post-form.tsx import { createPost } from "./actions" export default function NewPostForm() { return (