import { useEffect, useMemo, useRef } from 'react' export function useDebouncedCallback void>(fn: T, delay: number): T { const ref = useRef(fn) useEffect(() => { ref.current = fn }) return useMemo(() => { let timer: ReturnType | undefined return ((...args: Parameters) => { if (timer) clearTimeout(timer) timer = setTimeout(() => ref.current(...args), delay) }) as T }, [delay]) }