import { useEffect, useRef } from 'react' type Delay = number | null type TimerHandler = (...args: any[]) => void export const useInterval = (callback: TimerHandler, delay: Delay) => { const savedCallbackRef = useRef<TimerHandler>() useEffect(() => { savedCallbackRef.current = callback }, [callback]) useEffect(() => { const handler = (...args: any[]) => savedCallbackRef.current!(...args) if (delay !== null) { const intervalId = setInterval(handler, delay) return () => clearInterval(intervalId) } }, [delay]) }