// Created on savesnippets.com ยท https://savesnippets.com/EOUfVY2gy1Ecps import { useEffect, useState } from 'react'; export function useDebounce(value: T, delay = 300): T { const [debounced, setDebounced] = useState(value); useEffect(() => { const t = setTimeout(() => setDebounced(value), delay); return () => clearTimeout(t); }, [value, delay]); return debounced; } // Usage in a search box: function SearchBar() { const [q, setQ] = useState(''); const dq = useDebounce(q, 300); useEffect(() => { if (dq) fetch(`/search?q=${encodeURIComponent(dq)}`); }, [dq]); return setQ(e.target.value)} />; }