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 = setTimeout(() => { 13 _setState(st); 14 timer.current = undefined; 15 }, ms); 16 return; 17 } 18 timer.current && clearTimeout(timer.current); 19 timer.current = undefined; 20 _setState(st); 21 } 22 23 return [_state, setState, _setState] as [ 24 ...ReturnType<typeof useState<T>>, 25 ReturnType<typeof useState<T>>[1], 26 ]; 27} 28