garage-webui/src/hooks/useDebounce.ts

21 lines
471 B
TypeScript
Raw Normal View History

2024-08-16 01:23:55 +07:00
import { useCallback, useRef } from "react";
export const useDebounce = <Args extends unknown[]>(
fn: (...args: Args) => void,
2024-08-16 01:23:55 +07:00
delay: number = 500
) => {
const timerRef = useRef<NodeJS.Timeout | null>(null);
const debouncedFn = useCallback(
(...args: Args) => {
2024-08-16 01:23:55 +07:00
if (timerRef.current) {
clearTimeout(timerRef.current);
}
timerRef.current = setTimeout(() => fn(...args), delay);
},
[fn, delay]
2024-08-16 01:23:55 +07:00
);
return debouncedFn;
2024-08-16 01:23:55 +07:00
};