@lad-tech/mobydick-utils
Version:
Utils for MobyDick
33 lines (25 loc) • 690 B
text/typescript
import {useEffect, useMemo, useRef} from 'react';
import useLatest from './useLatest';
const useDebounce = <T extends (...arg: never[]) => void>(
callback: T,
delay = 1000,
) => {
const latestCallback = useLatest(callback);
let timeout = useRef<ReturnType<typeof setTimeout>>(null).current;
const debouncedFn = useMemo(() => {
return (...args: Parameters<T>) => {
timeout && clearTimeout(timeout);
timeout = setTimeout(() => {
latestCallback.current(...args);
}, delay);
};
}, []);
useEffect(
() => () => {
timeout && clearTimeout(timeout);
},
[debouncedFn],
);
return debouncedFn;
};
export default useDebounce;