xref: /MusicFree/src/hooks/useOnceEffect.ts (revision 6f73e807144af9b496f38d87ede85146d6bf98f4)
1*6f73e807S猫头猫import {useEffect, useRef} from 'react';
2*6f73e807S猫头猫
3*6f73e807S猫头猫export default function useOnceEffect(
4*6f73e807S猫头猫    cb: () => (() => void) | void,
5*6f73e807S猫头猫    deps?: any[],
6*6f73e807S猫头猫) {
7*6f73e807S猫头猫    const flag = useRef<boolean>(false);
8*6f73e807S猫头猫
9*6f73e807S猫头猫    useEffect(() => {
10*6f73e807S猫头猫        let result;
11*6f73e807S猫头猫        if (flag.current) {
12*6f73e807S猫头猫            return result;
13*6f73e807S猫头猫        }
14*6f73e807S猫头猫        if (!deps || deps.every(_ => !!_)) {
15*6f73e807S猫头猫            flag.current = true;
16*6f73e807S猫头猫            result = cb();
17*6f73e807S猫头猫        }
18*6f73e807S猫头猫        return result;
19*6f73e807S猫头猫    }, deps);
20*6f73e807S猫头猫}
21