Spaces:
Sleeping
Sleeping
File size: 693 Bytes
05c5ed5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | import { useCallback, useRef } from "react";
/**
* Custom hook for debouncing function calls
* @param callback - Function to debounce
* @param delay - Delay in milliseconds
* @returns Debounced function
*/
export function useDebounce<T extends (...args: any[]) => any>(
callback: T,
delay: number,
): T {
const timeoutRef = useRef<NodeJS.Timeout | null>(null);
const debouncedCallback = useCallback(
(...args: Parameters<T>) => {
if (timeoutRef.current) {
clearTimeout(timeoutRef.current);
}
timeoutRef.current = setTimeout(() => {
callback(...args);
}, delay);
},
[callback, delay],
) as T;
return debouncedCallback;
}
|