Next.jsPytanie 15 z 15
Zadanie: jak zbudować filtry zsynchronizowane z URL?
Najpierw odpowiedz na głos lub w myślach, potem porównaj.
Odpowiedź
Traktuję URL jako źródło zatwierdzonych filtrów, żeby działały odświeżanie, linkowanie i przycisk Wstecz. Tymczasowo wpisywany tekst może pozostać lokalnym stanem.
JSX
'use client';
import { usePathname, useRouter, useSearchParams } from 'next/navigation';
export default function SortButton() {
const router = useRouter();
const pathname = usePathname();
const current = useSearchParams();
function sortByPrice() {
const params = new URLSearchParams(current.toString());
params.set('sort', 'price');
params.delete('page');
router.replace(`${pathname}?${params.toString()}`, { scroll: false });
}
return <button onClick={sortByPrice}>Sortuj po cenie</button>;
}Praktycznie: serwer waliduje query i filtruje duży zbiór; klient może filtrować małą listę już w pamięci. replace nie dodaje wpisu historii, push dodaje.
Doprecyzowanie: przy statycznym renderowaniu komponent używający useSearchParams może wymagać granicy Suspense. Kod pokazuje przycisk; walidacja i pobieranie danych to kolejna część zadania.
Jak poszło? Bądź szczery — „Jeszcze nie” dodaje pytanie do powtórki.