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