File size: 484 Bytes
1c72248
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import { useEffect, useRef } from 'react';

export function useFromNull(effect: () => void | (() => void), deps: Array<any | null | undefined>) {
  const prevDepsRef = useRef<(any | null | undefined)[]>([]);

  useEffect(() => {
    const shouldRun = deps.some((dep, i) => prevDepsRef.current[i] == null && dep != null);

    if (shouldRun) {
      const cleanup = effect();
      prevDepsRef.current = deps;
      return cleanup;
    }

    prevDepsRef.current = deps;
  }, deps);
}