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