20 lines
454 B
TypeScript
20 lines
454 B
TypeScript
import { useEffect, useRef } from "react";
|
|
|
|
export function useEffectOnceWhenReady(
|
|
effect: () => any,
|
|
deps: any[],
|
|
testers: (undefined | ((m: any) => boolean))[]
|
|
) {
|
|
const hasRun = useRef(false);
|
|
|
|
useEffect(() => {
|
|
const allReady = deps.every(
|
|
(d, i) => d !== undefined && d !== null && (!testers[i] || testers[i](d))
|
|
);
|
|
if (!allReady || hasRun.current) return;
|
|
hasRun.current = true;
|
|
|
|
return effect();
|
|
}, deps);
|
|
}
|