Files
axiom/src/hooks/use-once.ts
T
2026-01-09 19:56:44 +01:00

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);
}