useDebounce

Atrasar um valor reativo

Da coleção Custom Hooks. Retorna uma cópia do valor que só atualiza depois que ele para de mudar por delay ms — ideal para não reagir a cada tecla num input.

import { useEffect, useState } from "react";

const useDebounce = <T>(value: T, delay = 500): T => {
  const [debounced, setDebounced] = useState<T>(value);

  useEffect(() => {
    const id = setTimeout(() => setDebounced(value), delay);
    return () => clearTimeout(id); // cancela se o valor mudar antes do prazo.
  }, [value, delay]);

  return debounced;
};

export default useDebounce;

⚠️ Ajustes em relação ao rascunho: o original usava useRef sem importá-lo; aqui o timer vive numa variável local do efeito, dispensando a ref.

Exemplo — buscar só quando o usuário pausa a digitação:

const [query, setQuery] = useState("");
const debounced = useDebounce(query, 400);

useEffect(() => {
  if (debounced) fetchResults(debounced);
}, [debounced]);

Relacionadas: Custom Hooks · use-listener · performance em React.

Construído com Eleventy · busca por Lunr.js