import { useState, useEffect } from 'react'; /** * Custom hook that debounces a value. * @param value The value to be debounced. * @param delay The delay in milliseconds. * @returns The debounced value. */ export const useDebounce = (value: T, delay: number): T => { const [debouncedValue, setDebouncedValue] = useState(value); useEffect( () => { // Set debouncedValue to value (passed in) after the specified delay const handler = setTimeout(() => { setDebouncedValue(value); }, delay); // Return a cleanup function that will be called every time ... // ... useEffect is re-called. useEffect will be re-called ... // ... if value or delay changes. return () => { clearTimeout(handler); }; }, [value, delay] // Only re-call effect if value or delay changes ); return debouncedValue; };