Next.jsAdvanced
Server Actions ও Mutations
"use server" দিয়ে form submission ও data mutation — Server Actions সম্পূর্ণ বাংলায়।
10টি অংশবাংলা ভাষায়
Server Actions হলো server-এ চলা asynchronous functions যাকে Client Component থেকে সরাসরি কল করা যায়। Form submission, data update-এর জন্য সবচেয়ে modern পদ্ধতি।
Inline Server Action
app/posts/page.tsxtsx
tsx
export default function Page() {
async function createPost(formData: FormData) {
"use server";
const title = formData.get("title");
await db.post.create({ data: { title } });
}
return (
<form action={createPost}>
<input name="title" placeholder="Post title" required />
<button type="submit">Publish</button>
</form>
);
}Separate Actions File
app/actions.tsts
ts
"use server";
export async function createPost(formData: FormData) {
const title = formData.get("title");
await db.post.create({ data: { title } });
}useActionState দিয়ে State Management
app/ui/form.tsxtsx
tsx
"use client";
import { useActionState } from "react";
import { createPost } from "@/app/actions";
const initialState = { message: "" };
export function Form() {
const [state, formAction, pending] = useActionState(
createPost,
initialState
);
return (
<form action={formAction}>
<input type="text" name="title" required />
{state?.message && <p aria-live="polite">{state.message}</p>}
<button disabled={pending}>
{pending ? "Creating..." : "Create Post"}
</button>
</form>
);
}Revalidate After Mutation
app/actions.tsts
ts
"use server";
import { revalidatePath } from "next/cache";
import { redirect } from "next/navigation";
export async function createPost(formData: FormData) {
const post = await db.post.create({
data: { title: formData.get("title") },
});
revalidatePath("/posts"); // cache refresh
redirect(`/posts/${post.id}`);
}directive সতর্কতা
"use server" directive ফাইলের শুরুতে বা function-এর ভেতরে দেওয়া যায়। ফাইলে দিলে সব export Server Action হয়। Client Component থেকে import করা যায় এবং সবসময় async function হতে হয়।
শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।