use server を付けた関数はクライアントから呼べて、実行はサーバーで起きます。JavaScript が無くても、同じフォームがそのまま動きます。
request からヘッダーと cookie を読み取り専用で読めます。[param]・(group)・_ の私物だけを認め、規約から外れたものはビルドを落とします。error.tsx が layout の内側に描かれ、枠は残ります。移転したディレクトリには redirect.ts を 1 行置き、Server Action は redirect() で送り先を告げます。page.tsx や layout.tsx が paramsSchema を export すると、合わない値はそのパターンが答えず、本物の 404 になります。リンクはスキーマの出力型で書けます。設計ガイドは npm パッケージに同梱されています。AIコーディングエージェントは node_modules/@k8ordo/server/docs/ からインストールした版そのものを読みます。
// src/routes/_parts/actions.ts
'use server';
export async function createTalk(_previous: FormState, formData: FormData) {
const parsed = parseForm(talkSchema, formData);
if (!parsed.success) return parsed.state;
await insertTalk(parsed.data);
redirect('/talks'); // throw されるので、この後の行は走らない
}
// src/routes/_parts/talk-form.tsx
'use client';
export function TalkForm() {
const [state, formAction] = useActionState(createTalk, {});
return <form action={formAction}>…</form>;
}