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

Search Params ဖြင့် Filter နှင့် Pagination

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

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

  • searchParams Promise ကိုဖတ်ရန်
  • URL ကို UI state အဖြစ်သုံးရန်
  • Input validation နှင့် default value ထားရန်

Search keyword ကို component state ထဲပဲသိမ်းရင် page refresh လုပ်တာနဲ့ ပျောက်သွားပြီး filter result ကို သူငယ်ချင်းဆီ link ပို့လို့မရပါဘူး။ URL query string ထဲထည့်ထားရင် back/forward၊ bookmark နဲ့ share အားလုံး အလိုအလျောက်အလုပ်လုပ်ပါတယ်။

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

Page component ရဲ့ searchParams မှ q နဲ့ page ကို await လုပ်ယူနိုင်ပါတယ်။ User က URL ကိုလက်နဲ့ပြင်နိုင်တာကြောင့် page number ကို Number ပြောင်းပြီး အနည်းဆုံး 1 ဖြစ်အောင် validate လုပ်ပါ။ Input တစ်လုံးစီရိုက်တိုင်း server သွားမခေါ်ချင်ရင် Client Component မှာ debounce လုပ်ပြီး router.replace နဲ့ URL ပြောင်းနိုင်ပါတယ်။

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

tsx
export default async function NotesPage({
  searchParams,
}: {
  searchParams: Promise<{ q?: string; page?: string }>;
}) {
  const params = await searchParams;
  const query = params.q?.trim() ?? "";
  const requestedPage = Number(params.page ?? "1");
  const page = Number.isFinite(requestedPage) && requestedPage > 0
    ? requestedPage
    : 1;
  const notes = await searchNotes({ query, page });

  return <NoteList notes={notes} />;
}

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

q မရှိရင် အလွတ် string၊ page မမှန်ရင် 1 သုံးပါတယ်။ Data function က normalized values သာလက်ခံလို့ မမျှော်လင့်တဲ့ query ကို တစ်နေရာတည်းမှာထိန်းနိုင်ပါတယ်။

You should see
/notes?q=next&page=2 ကိုဖွင့်လျှင် Next keyword ၏ ဒုတိယစာမျက်နှာ data ပြမည်။

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

difficulty=beginner query ပါသော tutorial filter တစ်ခုထည့်ပြီး မသိသော difficulty ရောက်ရင် all ကို default ထားပါ။

Next.js — Fetching DataNext.js

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

  • URL ကလာသော string ကို validate မလုပ်ဘဲ database query ထဲသုံးခြင်း
  • Share လုပ်သင့်သော filter state အားလုံးကို local state ထဲသာထားခြင်း

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

difficulty=beginner query ပါသော tutorial filter တစ်ခုထည့်ပြီး မသိသော difficulty ရောက်ရင် all ကို default ထားပါ။

You'll know it worked when: /notes?q=next&page=2 ကိုဖွင့်လျှင် Next keyword ၏ ဒုတိယစာမျက်နှာ data ပြမည်။

Search Params ဖြင့် Filter နှင့် Pagination | Thuta Learning