# Server Actions no Next.js 16 em 2026: Mutações, Revalidação e Perguntas de Entrevista > Como as Server Actions do Next.js 16 lidam com mutações, revalidação, estado de pendência, UI otimista e segurança, com as perguntas de entrevista que testam cada conceito. - Published: 2026-06-24 - Updated: 2026-07-06 - Author: SharpSkill - Tags: next.js, server-actions, react, mutations, revalidation, interview - Reading time: 11 min --- As Server Actions do Next.js transformam uma simples função assíncrona em um endpoint de mutação no servidor que um formulário pode chamar diretamente, sem rota de API, sem `fetch` no cliente e sem serialização manual de JSON. No Next.js 16, elas são a forma padrão de escrever mutações de dados e aparecem em quase toda entrevista sênior de React em 2026. Esta análise detalhada mostra como elas são executadas, como a revalidação propaga dados atualizados para a UI, como modelar estados de pendência e erro e as regras de segurança que derrubam a maioria dos desenvolvedores. > **Definição em uma frase** > > Uma Server Action é uma função assíncrona marcada com `"use server"` que roda apenas no servidor e pode ser chamada de um componente cliente ou de um formulário como se fosse local, enquanto o Next.js cuida automaticamente da requisição de rede, da serialização dos argumentos e da proteção contra CSRF. ## Como as Server Actions são executadas por baixo dos panos Uma Server Action é uma função exclusiva do servidor invocada pela rede por meio de um endpoint gerado pelo compilador. Quando uma função carrega a diretiva `"use server"`, o compilador do Next.js nunca envia o corpo dela para o navegador. Em vez disso, ele substitui a função por uma referência leve: um ID de ação em hash mapeado para uma rota POST gerada. Chamar a ação a partir do cliente envia uma requisição para essa rota, a função real roda no servidor e o resultado serializado retorna em streaming para quem a chamou. Esse design tem três consequências que vale a pena guardar tanto para o código de produção quanto para entrevistas. Primeira: argumentos e valores de retorno precisam ser serializáveis, porque atravessam a rede como payloads codificados. Segunda: segredos permanecem no servidor, já que o corpo da função nunca é empacotado para o cliente. Terceira: ações vinculadas a um `
` funcionam mesmo antes da hidratação, e é por isso que o aprimoramento progressivo é um dos grandes atrativos. O [guia oficial do Next.js sobre atualização de dados](https://nextjs.org/docs/app/getting-started/updating-data) documenta o modelo de execução completo. Toda Server Action vive em um arquivo ou bloco marcado com `"use server"`. Uma mutação simples se parece com isto: ```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}`) } ``` A função lê o `FormData` enviado, persiste os dados por meio de um service, invalida a listagem em cache e redireciona. Nenhum JavaScript no cliente é necessário para nada disso. ## Conectando uma Server Action a um formulário sem JavaScript no cliente Passar a ação para a prop `action` do formulário é a integração mais simples. O Next.js serializa o envio em `FormData` e chama a função no servidor. Como isso usa o mecanismo nativo de submissão de formulários, funciona com o JavaScript desativado e evolui de forma transparente assim que a página é hidratada. ```tsx // app/posts/new-post-form.tsx import { createPost } from "./actions" export default function NewPostForm() { return (