Thuta Learning
ရှာဖွေရန်
AdvancedWeb Developmentintermediate

Server Actions၊ Forms နှင့် Validation

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • use server function ရေးရန်
  • FormData ကို validate လုပ်ရန်
  • Mutation ပြီးနောက် UI refresh လုပ်ရန်

Form တစ်ခု submit ဖို့ API endpoint၊ client fetch နဲ့ loading state အကုန်လုံးကို အမြဲရေးစရာမလိုပါဘူး။ Server Action က form action နဲ့ server function ကို ချိတ်ပေးပြီး JavaScript မတင်ရသေးချိန်တောင် form submit လုပ်နိုင်တဲ့ progressive enhancement ရစေပါတယ်။

နားလည်ထားရမယ့် အချက်

Server Function က async ဖြစ်ရပြီး use server directive ပါရပါတယ်။ Browser ကခေါ်နိုင်တဲ့ server endpoint တစ်ခုလိုပဲ ယူဆပြီး authentication၊ authorization နဲ့ validation ကို function အတွင်းပြန်စစ်ပါ။ Mutation ပြီးရင် updateTag၊ revalidateTag သို့မဟုတ် revalidatePath နဲ့ data ကိုအသစ်လုပ်ပြီး redirect နဲ့ detail page သွားနိုင်ပါတယ်။ Expected validation error ကို user ဖတ်နိုင်တဲ့ state အဖြစ်ပြန်ပေးတာက raw exception ပြတာထက်ကောင်းပါတယ်။

အတူတူ စမ်းရေးကြည့်မယ်

tsx
// app/actions.ts
"use server";
import { updateTag } from "next/cache";

export async function createNote(formData: FormData) {
  const title = String(formData.get("title") ?? "").trim();
  if (title.length < 3) return { error: "ခေါင်းစဉ် အနည်းဆုံး ၃ လုံးရေးပါ" };

  await db.note.create({ data: { title } });
  updateTag("notes");
  return { success: true };
}

// app/notes/new/page.tsx
<form action={createNote}>
  <label htmlFor="title">ခေါင်းစဉ်</label>
  <input id="title" name="title" required minLength={3} />
  <button type="submit">သိမ်းမယ်</button>
</form>

Code က ဘယ်လိုအလုပ်လုပ်သလဲ

createNote က title ကို FormData မှယူပြီး အနည်းဆုံးသုံးလုံးစစ်ပါတယ်။ Database ထဲထည့်ပြီး notes tag ကို expire လုပ်လို့ list အသစ်မြင်ရပါတယ်။ Form component က function ကို action prop ထဲထည့်ရုံပါပဲ။

You should see
Valid title ကို database ထဲသိမ်းပြီး notes list မှာ ပြောင်းလဲမှုချက်ချင်းမြင်မည်။

၅ မိနစ် စမ်းကြည့်

Content textarea ပါထည့်ပြီး server ဘက်မှာ 10 မှ 2000 characters အတွင်းရှိမရှိ စစ်ပါ။

Next.js — Mutating DataNext.js

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • Browser required validation ရှိတာကြောင့် server validation မလိုဟု ထင်ခြင်း
  • Authorization မစစ်ဘဲ update/delete Server Action ဖွင့်ထားခြင်း

လေ့ကျင့်ခန်း

Content textarea ပါထည့်ပြီး server ဘက်မှာ 10 မှ 2000 characters အတွင်းရှိမရှိ စစ်ပါ။

You'll know it worked when: Valid title ကို database ထဲသိမ်းပြီး notes list မှာ ပြောင်းလဲမှုချက်ချင်းမြင်မည်။

Server Actions၊ Forms နှင့် Validation | Thuta Learning