Comment débouncer un champ de recherche en JavaScript ?
poze 3 months ago162 gadefr
0
Mon champ de recherche envoie une requête à chaque frappe. Pour « javascript », ça fait 10 requêtes. Comment attendre que l'utilisateur ait fini de taper ?
Dyagnostik IA
Se IA ki fè l. Se pa yon repons — kominote a anba a konfime oswa korije l. Toujou verifye anvan ou fye l.
poze 3 months ago
Ruth Jean 2.2k
1 Repons
7
✓✓ Repons yo aksepte
C'est le debounce : on repousse l'appel tant que l'utilisateur continue de taper.
function debounce(fn, delay = 300) {
let t;
return (...args) => {
clearTimeout(t);
t = setTimeout(() => fn(...args), delay);
};
}
const search = debounce((q) => fetch(`/api/search?q=${encodeURIComponent(q)}`), 300);
input.addEventListener('input', (e) => search(e.target.value));
En React, debounce la valeur plutôt que la fonction :
function useDebounced<T>(value: T, delay = 300) {
const [v, setV] = useState(value);
useEffect(() => {
const t = setTimeout(() => setV(value), delay);
return () => clearTimeout(t);
}, [value, delay]);
return v;
}
Pense aussi à annuler la requête précédente avec un AbortController, pour éviter qu'une réponse lente écrase une plus récente.
Konekte pou di lòt moun si li te mache.
answered 2 months ago
Jean Pierre 5.1k
Sign in and verify your email to post an answer.