Server Functions are async functions that run on the server, callable from client components.
Code:
1"use server";23export async function createPost(formData: FormData) {4 const title = formData.get("title") as string;5 const content = formData.get("content") as string;67 await db.posts.create({ data: { title, content } });8 revalidatePath("/posts");9}1011// Client Component12import { createPost } from "./actions";1314function PostForm() {15 return (16 <form action={createPost}>17 <input name="title" placeholder="Title" />18 <textarea name="content" placeholder="Content" />19 <button type="submit">Create Post</button>20 </form>21 );22}
With useActionState:
1import { useActionState } from "react";23function PostForm() {4 const [state, formAction, isPending] = useActionState(5 async (prev, formData) => {6 const result = await createPost(formData);7 if (result.error) return { error: result.error };8 redirect("/posts");9 },10 null11 );1213 return (14 <form action={formAction}>15 <input name="title" />16 {state?.error && <p className="error">{state.error}</p>}17 <button disabled={isPending}>Create</button>18 </form>19 );20}
Benefits: