import { useEffect, useRef, useState } from "react"; /** * Debounce a value * @param value - new value * @param delay - delay timer * @returns debounced value */ export const useDebouncedValue = (value: T, delay = 500) => { const [debouncedValue, setDebouncedValue] = useState(undefined); const timeoutRef = useRef>(); useEffect(() => { timeoutRef.current = setTimeout(() => { setDebouncedValue(value); }, delay); return () => { clearTimeout(timeoutRef.current); }; }, [value, delay]); return debouncedValue; };