2024-08-16 01:23:55 +07:00
|
|
|
import { useCallback, useRef } from "react";
|
|
|
|
|
|
2025-07-15 15:59:47 +08:00
|
|
|
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(
|
2025-07-15 15:59:47 +08:00
|
|
|
(...args: Args) => {
|
2024-08-16 01:23:55 +07:00
|
|
|
if (timerRef.current) {
|
|
|
|
|
clearTimeout(timerRef.current);
|
|
|
|
|
}
|
|
|
|
|
timerRef.current = setTimeout(() => fn(...args), delay);
|
|
|
|
|
},
|
2025-07-15 15:59:47 +08:00
|
|
|
[fn, delay]
|
2024-08-16 01:23:55 +07:00
|
|
|
);
|
|
|
|
|
|
2025-07-15 15:59:47 +08:00
|
|
|
return debouncedFn;
|
2024-08-16 01:23:55 +07:00
|
|
|
};
|