Wzorzec 08
Wyszukiwanie bez szarpania
Wyszukiwarka zmienia widok przy każdym znaku, więc każdy błąd stabilności widać w niej natychmiast. Zapytania ogranicza debounce, wskaźnik ładowania ma miejsce w polu zamiast pod nim, a lista wyników trzyma wysokość niezależnie od liczby trafień.
Szukaj w projektach studia
Wpisz na przykład atlas, novak albo coś bez sensu. Zapytanie leci po pauzie w pisaniu, a lista trzyma wysokość dla każdej liczby trafień.
8 wyników
- Atlas RebrandingBranding
- Panel HeliotropAplikacja
- Sklep Novak StudioE-commerce
- Portfolio WrzosStrona
- Atlas AkademiaPlatforma
- Heliotrop RaportyAplikacja
- Novak MagazynTreści
- Wrzos IdentyfikacjaBranding
Reguły
- Zapytanie leci dopiero po pauzie w pisaniu, nie po każdym znaku.
- Wskaźnik ładowania ma zarezerwowane miejsce w polu, nie pod nim.
- Kontener wyników trzyma wysokość dla listy, pustki i błędu.
- Liczbę wyników ogłasza aria-live, a stan pusty proponuje korektę zapytania.
Wzorzec w kodzie
useEffect(() => {
setSearching(true);
const timer = setTimeout(async () => {
setResults(await search(query));
setSearching(false);
}, 400);
return () => clearTimeout(timer);
}, [query]);<p aria-live="polite" className="min-h-[1.5em]">
{searching ? "Szukam…" : resultDescription(results.length)}
</p>
<div className="grid min-h-72 grid-rows-1">
{results.length > 0 ? <List results={results} /> : <EmptyState />}
</div>