# Server Actions Next.js 16 di 2026: Mutasi, Revalidasi, dan Pertanyaan Wawancara > Cara Server Actions Next.js 16 menangani mutasi, revalidasi, status pending, UI optimistis, dan keamanan, lengkap dengan pertanyaan wawancara yang menguji setiap konsep. - Published: 2026-06-24 - Updated: 2026-07-06 - Author: SharpSkill - Tags: next.js, server-actions, react, mutations, revalidation, interview - Reading time: 11 min --- Server Actions di Next.js mengubah fungsi async biasa menjadi endpoint mutasi sisi server yang dapat dipanggil langsung oleh sebuah form, tanpa route API, tanpa `fetch` di sisi klien, dan tanpa serialisasi JSON manual. Pada Next.js 16, Server Actions menjadi cara default untuk menulis mutasi data, dan hampir selalu muncul di setiap wawancara React senior pada 2026. Pembahasan mendalam ini menguraikan cara Server Actions dieksekusi, cara revalidasi menyebarkan data terbaru ke UI, cara memodelkan status pending dan error, serta aturan keamanan yang kerap menjebak banyak pengembang. > **Definisi dalam Satu Kalimat** > > Server Action adalah fungsi async yang ditandai dengan `"use server"` yang hanya berjalan di server dan dapat dipanggil dari komponen klien atau form seolah-olah bersifat lokal, sementara Next.js menangani permintaan jaringan, serialisasi argumen, dan proteksi CSRF secara otomatis. ## Cara Server Actions Dieksekusi di Balik Layar Server Action adalah fungsi khusus server yang dipanggil melalui jaringan lewat endpoint yang dihasilkan compiler. Ketika sebuah fungsi membawa direktif `"use server"`, compiler Next.js tidak pernah mengirim badan fungsi tersebut ke browser. Sebagai gantinya, compiler menggantinya dengan referensi ringan: sebuah ID action ter-hash yang dipetakan ke route POST yang dihasilkan. Memanggil action dari klien mengirim permintaan ke route tersebut, fungsi asli berjalan di server, dan hasil yang telah diserialisasi dialirkan kembali ke pemanggil. Desain ini membawa tiga konsekuensi yang perlu diingat, baik untuk kode produksi maupun wawancara. Pertama, argumen dan nilai kembalian harus dapat diserialisasi, karena keduanya melintasi jaringan sebagai payload terenkode. Kedua, rahasia tetap berada di server, sebab badan fungsi tidak pernah di-bundle untuk klien. Ketiga, action yang dilekatkan pada sebuah `
` tetap berfungsi bahkan sebelum hidrasi, itulah alasan progressive enhancement menjadi nilai jual utamanya. [Panduan resmi Next.js tentang pembaruan data](https://nextjs.org/docs/app/getting-started/updating-data) mendokumentasikan model eksekusi selengkapnya. Setiap Server Action berada di dalam file atau blok yang ditandai dengan `"use server"`. Sebuah mutasi tunggal terlihat seperti ini: ```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}`) } ``` Fungsi tersebut membaca `FormData` yang dikirimkan, menyimpannya melalui service, menginvalidasi listing yang ter-cache, lalu melakukan redirect. Tidak ada JavaScript klien yang dibutuhkan untuk semua itu. ## Menghubungkan Server Action ke Form Tanpa JavaScript Klien Meneruskan action ke prop `action` sebuah form adalah integrasi paling sederhana. Next.js menserialisasi kiriman menjadi `FormData` dan memanggil fungsi tersebut di server. Karena mekanisme ini memakai submission form native, ia tetap berfungsi meski JavaScript dinonaktifkan dan meningkat mulus begitu halaman terhidrasi. ```tsx // app/posts/new-post-form.tsx import { createPost } from "./actions" export default function NewPostForm() { return (