# Next.js 16 Server Actions ปี 2026: Mutation, Revalidation และคำถามสัมภาษณ์ > Next.js 16 Server Actions จัดการ mutation, revalidation, สถานะ pending, optimistic UI และความปลอดภัยอย่างไร พร้อมคำถามสัมภาษณ์ที่ทดสอบแต่ละแนวคิด - 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 เปลี่ยนฟังก์ชัน async ธรรมดาให้กลายเป็น endpoint สำหรับการเปลี่ยนแปลงข้อมูล (mutation) ฝั่งเซิร์ฟเวอร์ที่ฟอร์มเรียกใช้ได้โดยตรง โดยไม่ต้องมี API route ไม่ต้องใช้ `fetch` ฝั่งไคลเอนต์ และไม่ต้องทำ serialization ของ JSON เอง ใน Next.js 16 นี่คือวิธีมาตรฐานสำหรับการเขียน mutation ของข้อมูล และปรากฏในการสัมภาษณ์งาน React ระดับ senior แทบทุกครั้งในปี 2026 บทวิเคราะห์เชิงลึกนี้อธิบายว่ามันทำงานเบื้องหลังอย่างไร การ revalidation ส่งข้อมูลใหม่ไปยัง UI ได้อย่างไร วิธีจัดการสถานะ pending และ error รวมถึงกฎด้านความปลอดภัยที่ทำให้นักพัฒนาส่วนใหญ่สะดุด > **นิยามในหนึ่งประโยค** > > Server Action คือฟังก์ชัน async ที่กำกับด้วย `"use server"` ซึ่งทำงานเฉพาะบนเซิร์ฟเวอร์ และเรียกใช้จาก client component หรือจากฟอร์มได้ราวกับเป็นฟังก์ชันภายในเครื่อง ในขณะที่ Next.js จัดการ request ผ่านเครือข่าย การ serialize อาร์กิวเมนต์ และการป้องกัน CSRF ให้โดยอัตโนมัติ ## Server Action ทำงานเบื้องหลังอย่างไร Server Action คือฟังก์ชันที่ทำงานเฉพาะฝั่งเซิร์ฟเวอร์ ซึ่งถูกเรียกผ่านเครือข่ายด้วย endpoint ที่คอมไพเลอร์สร้างขึ้น เมื่อฟังก์ชันมี directive `"use server"` คอมไพเลอร์ของ Next.js จะไม่ส่งเนื้อหาของฟังก์ชันไปยังเบราว์เซอร์เลย แต่จะแทนที่ฟังก์ชันด้วยการอ้างอิงแบบเบา นั่นคือ action ID ที่ถูกแฮชและแมปไปยัง POST route ที่ถูกสร้างขึ้น เมื่อเรียก action จากไคลเอนต์ ระบบจะส่ง request ไปยัง route นั้น ฟังก์ชันจริงจะทำงานบนเซิร์ฟเวอร์ และผลลัพธ์ที่ผ่านการ serialize จะสตรีมกลับมายังผู้เรียก การออกแบบนี้มีผลลัพธ์สามประการที่ควรจดจำทั้งสำหรับโค้ดที่ใช้งานจริงและสำหรับการสัมภาษณ์ ประการแรก อาร์กิวเมนต์และค่าที่ส่งคืนต้อง serialize ได้ เพราะมันเดินทางข้ามเครือข่ายในรูปแบบ payload ที่ถูกเข้ารหัส ประการที่สอง ความลับต่าง ๆ ยังคงอยู่บนเซิร์ฟเวอร์ เนื่องจากเนื้อหาของฟังก์ชันไม่เคยถูกรวมเข้าไปใน bundle ของไคลเอนต์ ประการที่สาม action ที่ผูกกับ `
` ทำงานได้แม้ก่อนการ hydration ซึ่งเป็นเหตุผลว่าทำไม progressive enhancement จึงเป็นจุดขายหลัก [คู่มือของ Next.js เกี่ยวกับการอัปเดตข้อมูล](https://nextjs.org/docs/app/getting-started/updating-data) อธิบายโมเดลการทำงานทั้งหมดไว้อย่างครบถ้วน Server Action ทุกตัวอยู่ในไฟล์หรือบล็อกที่กำกับด้วย `"use server"` mutation เดี่ยว ๆ มีหน้าตาเช่นนี้ ```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}`) } ``` ฟังก์ชันนี้อ่านค่า `FormData` ที่ถูกส่งมา บันทึกข้อมูลผ่าน service ล้างแคชของรายการ และ redirect โดยไม่ต้องใช้ JavaScript ฝั่งไคลเอนต์เลยแม้แต่น้อย ## เชื่อม Server Action เข้ากับฟอร์มโดยไม่ต้องใช้ JavaScript ฝั่งไคลเอนต์ การส่ง action ไปยัง prop `action` ของฟอร์มคือการเชื่อมต่อที่ง่ายที่สุด Next.js จะ serialize ข้อมูลที่ส่งเข้าเป็น `FormData` และเรียกฟังก์ชันบนเซิร์ฟเวอร์ เนื่องจากวิธีนี้ใช้กลไกการ submit ฟอร์มแบบเนทีฟ มันจึงทำงานได้แม้ปิด JavaScript และยกระดับอย่างราบรื่นเมื่อหน้าเว็บ hydrate เสร็จ ```tsx // app/posts/new-post-form.tsx import { createPost } from "./actions" export default function NewPostForm() { return (