Files
pca-pijac/frontend/src/hooks/use-debounced-callback.ts

16 lines
474 B
TypeScript

import { useEffect, useMemo, useRef } from 'react'
export function useDebouncedCallback<T extends (...args: never[]) => void>(fn: T, delay: number): T {
const ref = useRef(fn)
useEffect(() => {
ref.current = fn
})
return useMemo(() => {
let timer: ReturnType<typeof setTimeout> | undefined
return ((...args: Parameters<T>) => {
if (timer) clearTimeout(timer)
timer = setTimeout(() => ref.current(...args), delay)
}) as T
}, [delay])
}