Action "use server"
Les fichiers dans src/actions/<nom>.ts avec une directive "use server" en tête exposent chaque export nommé comme un point de terminaison POST à /_bext/action/<export>. L'action reçoit une Request Web avec le corps du formulaire et retourne une Response. Il s'agit d'une passe de compilation distincte de la forme co-localisée loader/action sur les pages.
Astuce
Les fichiers "use server" sont compilés séparément et ne sont jamais inclus dans le bundle client. Nommez vos exports de façon précise : /_bext/action/<export> est l'URL publique, donc greet et handleUpload sont plus sûrs que process ou run.
Essayez
// src/actions/greeting.ts
"use server";
export async function greet(req: Request): Promise<Response> {
const form = await req.formData();
const name = String(form.get("name") ?? "stranger");
// ... apply state ...
return new Response(null, {
status: 303,
headers: { Location: "/examples/use-server-action?greeted=" + name },
});
}
// page.tsx — point the form's action attribute at the compiled endpoint
<form method="post" action="/_bext/action/greet">
<input name="name" />
<button type="submit">greet</button>
</form>