import {useState, useEffect} from 'react'; export function useDeferredState( duration = 1000, initialValue: T, ): [T, React.Dispatch>] { const [response, setResponse] = useState(initialValue); const [innerValue, setInnerValue] = useState(initialValue); useEffect(() => { const fn = setTimeout(() => { setResponse(innerValue); }, duration); return (): void => { clearTimeout(fn); }; }, [duration, innerValue]); return [response, setInnerValue]; }