URL State
Menaruh filter, pencarian, pagination, dan pilihan yang dapat dibagikan di URL tanpa menjadikan semua interaksi UI sebagai query parameter.
Tujuan belajar
- Mengidentifikasi state yang harus selamat saat refresh atau dapat dibagikan lewat URL
- Membedakan filter data dari UI panel filter yang membukanya
- Menyusun query parameter yang memiliki default dan parsing yang eksplisit
- Menghindari URL sebagai tempat untuk setiap detail visual sementara
Isi lesson
6 blok- 1.URL adalah contract untuk keadaan yang dapat dibuka kembaliBelum selesaiWajib
- 2.Membuat URL course list dari filter shareableBelum selesaiWajib
- 3.Coding practiceBelum selesaiWajib
- 4.Cek pemahamanBelum selesaiWajib
- 5.URL state adalah input yang perlu divalidasiBelum selesaiOpsional
- 6.RingkasanBelum selesaiWajib
URL adalah contract untuk keadaan yang dapat dibuka kembali
WajibKetika learner mencari course dengan query, memilih level, lalu membuka page kedua, URL yang mewakili keputusan tersebut memberi dua manfaat nyata: refresh tidak menghapus konteks dan link dapat dibagikan ke orang lain. URL state juga membuat browser back, forward, bookmark, serta analytics memiliki arti yang konsisten. Sebaliknya, isFilterPanelOpen, tooltip yang sedang terlihat, dan focus input tidak perlu masuk URL karena tidak membantu orang lain memahami hasil yang sedang dilihat.
Jaga parameter kecil, bernama jelas, dan memiliki default. URL bukan database untuk seluruh object filter atau setiap keystroke sementara. Tentukan juga siapa yang membaca parameter dan kapan nilai tidak valid dikembalikan ke default aman. Pada App Router, search params menjadi input page atau client interaction yang perlu diperlakukan sebagai input eksternal, bukan sekadar string acak yang langsung dipercaya.
Bagian ini memengaruhi progres lesson.
Membuat URL course list dari filter shareable
Wajibtype CourseFilter = {
query: string;
level: "beginner" | "intermediate" | "advanced";
page: number;
};
export function getCourseListUrl(filter: CourseFilter) {
const params = new URLSearchParams();
if (filter.query) params.set("query", filter.query);
params.set("level", filter.level);
params.set("page", String(filter.page));
return "/courses?" + params.toString();
}Function ini mengubah keputusan yang terlihat user menjadi link yang dapat dibuka ulang. Di page nyata, parse query, level, dan page dengan default sebelum melakukan query data. Jangan ikut menaruh isFilterPanelOpen ke URL: ia hanya menentukan apakah control terlihat, bukan course mana yang menjadi hasil catalog.
Bagian ini memengaruhi progres lesson.
Coding practice
WajibDibuka di workspace khususMove course filter to URL state
Buat URL catalog dari query, level, dan page agar hasil course dapat di-refresh serta dibagikan tanpa menyimpan detail panel UI.
Tujuan awal: Fokus di tab TS.
Practice ini dibuka di workspace khusus. Buka practice untuk memakai editor, preview, dan cek otomatis.
Tombol selesai aktif setelah semua validasi wajib lolos.
Cek pemahaman
WajibJawab duluCek pemahaman singkat
Manakah pasangan yang paling tepat untuk URL state pada halaman catalog course?
Progres lesson naik setelah jawaban benar.
Catatan penting
OpsionalURL state adalah input yang perlu divalidasi
User dapat mengedit query parameter secara manual atau membuka link lama. Parse page sebagai angka yang aman, batasi enum seperti level, dan tentukan default bila nilai tidak valid. Jangan mengasumsikan parameter URL selalu memenuhi type internal hanya karena TypeScript memberi type yang rapi setelah parsing.
Opsional, tidak menghambat penyelesaian lesson.
Ringkasan
Wajib- Gunakan URL state untuk keputusan data yang perlu selamat saat refresh atau dapat dibagikan.
- Filter, search, sort, dan pagination adalah kandidat yang umum; panel UI yang membukanya biasanya bukan.
- Parameter perlu nama jelas, default, serta parsing yang defensif.
- Jangan menaruh data sensitif atau detail visual sementara di URL.
- Berikutnya, kita menjaga state interaksi yang tidak perlu dibagikan tetap dekat component pemiliknya.
Bagian ini memengaruhi progres lesson.
Langkah berikutnya
Selesaikan bagian penting lesson ini
Lanjutkan blok wajib berikutnya: URL adalah contract untuk keadaan yang dapat dibuka kembali.