Capítulo 104 de 456
'use server' (feature do React) designa uma função ou arquivo para executar no servidor. No topo do arquivo, marca todas as funções exportadas como Server Functions; inline no topo de uma função, marca só aquela. Server Functions podem ser importadas em Client Components e executadas via referência que roda no servidor.
'use server' no topo do arquivo afeta todos os exports; dentro de uma função (ex. closure num Server Component), afeta só ela.'use server'; quando chamada de um Client Component, argumentos e retorno são serializados pela rede.auth()/cookies dentro da função, nunca aceite token como argumento da função.'use server'
import { db } from '@/lib/db'
import { auth } from '@/lib/auth'
export async function createUser(data: { name: string; email: string }) {
const session = await auth()
if (!session?.user) {
throw new Error('Unauthorized')
}
const user = await db.user.create({ data })
return { id: user.id, name: user.name }
}
session (não via parâmetro) e retorno restrito a { id, name }, nunca o registro bruto do banco.export default async function PostPage({ params }: { params: { id: string } }) {
const post = await getPost(params.id)
async function updatePost(formData: FormData) {
'use server'
await savePost(params.id, formData)
revalidatePath(`/posts/${params.id}`)
}
return <EditPost updatePostAction={updatePost} post={post} />
}
'use server' inline dentro de uma função declarada num Server Component, passada como prop para um Client Component.'use server' file-level deve ser async.'use server' se encaixa.