26 lines
629 B
React
26 lines
629 B
React
import { useRef, useEffect, useCallback } from "react";
|
|
|
|
export const useDebouncedCallback = (callback, delay = 300) => {
|
|
const timeoutRef = useRef(null);
|
|
const savedCallback = useRef(callback);
|
|
|
|
useEffect(() => {
|
|
savedCallback.current = callback;
|
|
}, [callback]);
|
|
|
|
useEffect(() => () => {
|
|
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
}, []);
|
|
|
|
return useCallback((...args) => {
|
|
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
timeoutRef.current = setTimeout(() => {
|
|
savedCallback.current(...args);
|
|
}, delay);
|
|
}, [delay]);
|
|
};
|
|
|
|
export default useDebouncedCallback;
|
|
|
|
|