dramaling-vocab-learning/frontend/hooks/flashcards/useDebounce.ts

21 lines
520 B
TypeScript

import { useRef, useCallback } from 'react';
export function useDebounce<T extends (...args: any[]) => any>(
func: T,
delay: number
): (...args: Parameters<T>) => void {
const timeoutRef = useRef<NodeJS.Timeout | undefined>(undefined);
return useCallback(
(...args: Parameters<T>) => {
if (timeoutRef.current) {
clearTimeout(timeoutRef.current);
}
timeoutRef.current = setTimeout(() => {
func(...args);
}, delay);
},
[func, delay]
);
}