import type { Dispatch, SetStateAction } from 'react'; import { useMemo, useState } from 'react'; import { debounce } from '../lib/debounce'; export function useDebouncedState( defaultValue: T, delay = 500, ): [T, Dispatch>, Dispatch>] { const [state, setState] = useState(defaultValue); const debouncedSetState = useMemo(() => debounce(setState, delay), [delay]); return [state, debouncedSetState, setState]; }