1import {useRef, useState} from 'react'; 2 3export default function useDelayFalsy<T extends any = any>( 4 init?: T, 5 ms: number = 0, 6) { 7 const [_state, _setState] = useState<T | undefined>(init); 8 const timer = useRef<any>(); 9 10 function setState(st: T) { 11 if (st === undefined || st === null || st === false) { 12 timer.current && clearTimeout(timer.current); 13 timer.current = setTimeout(() => { 14 _setState(st); 15 timer.current = undefined; 16 }, ms); 17 return; 18 } 19 timer.current && clearTimeout(timer.current); 20 timer.current = undefined; 21 _setState(st); 22 } 23 24 return [_state, setState, _setState] as [ 25 ...ReturnType<typeof useState<T>>, 26 ReturnType<typeof useState<T>>[1], 27 ]; 28} 29