useInterval

Executar uma função em intervalos

Da coleção Custom Hooks. Versão declarativa do setInterval: você passa a função e o delay, e o hook cuida de recriar e limpar o timer a cada mudança.

import { useEffect, useRef } from "react";

const useInterval = (callback: () => void, delay?: number) => {
  const savedCallback = useRef(callback);

  // Mantém o callback atual sem reiniciar o intervalo (ver Custom Hooks).
  useEffect(() => {
    savedCallback.current = callback;
  }, [callback]);

  useEffect(() => {
    if (delay == null) return; // delay nulo/undefined pausa o intervalo.
    const id = setInterval(() => savedCallback.current(), delay);
    return () => clearInterval(id);
  }, [delay]);
};

export default useInterval;

⚠️ Ajustes em relação ao rascunho: clearInterval (o rascunho limpava com clearTimeout) e dependência [delay], então mudar o delay reinicia o intervalo e null o pausa.

Exemplo — contador de segundos:

const [secs, setSecs] = useState(0);
useInterval(() => setSecs((s) => s + 1), 1000);

Relacionadas: Custom Hooks · use-listener.

Construído com Eleventy · busca por Lunr.js