import throttle from 'lodash.throttle'; import { useCallback, useEffect, useRef } from 'react'; export function useThrottle(cb: () => void, delay: number) { const options = { leading: true, trailing: false }; // add custom lodash options const cbRef = useRef(cb); // use mutable ref to make useCallback/throttle not depend on `cb` dep useEffect(() => { cbRef.current = cb; }); return useCallback( throttle(() => cbRef.current(), delay, options), [delay], ); }