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