Comment débouncer un champ de recherche en JavaScript ?
asked 3 months ago168 viewsfr
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 ?
AI diagnosis
AI-generated. Not an answer — the community below confirms or corrects it. Always verify before relying on it.
asked 3 months ago
Ruth Jean 2.2k
1 Answer
7
✓✓ Accepted answer
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.
Sign in to tell others whether this worked.
answered 3 months ago
Jean Pierre 5.1k
Sign in and verify your email to post an answer.