UNPKG

@orca-fe/hooks

Version:

React Hooks Collections

47 lines (45 loc) 1.7 kB
// Copy from ahooks import { useEffect, useRef } from 'react'; import depsAreSame from "./depsAreSame"; import { getTargetElement } from "./domTarget"; var createEffectWithTarget = useEffectType => { /** * * @param effect * @param deps * @param target target should compare ref.current vs ref.current, dom vs dom, ()=>dom vs ()=>dom */ var useEffectWithTarget = (effect, deps, target) => { var hasInitRef = useRef(false); var lastElementRef = useRef([]); var lastDepsRef = useRef([]); var unLoadRef = useRef(); useEffectType(() => { var targets = Array.isArray(target) ? target : [target]; var els = targets.map(item => getTargetElement(item)); // init run if (!hasInitRef.current) { hasInitRef.current = true; lastElementRef.current = els; lastDepsRef.current = deps; unLoadRef.current = effect(); return; } if (els.length !== lastElementRef.current.length || !depsAreSame(els, lastElementRef.current) || !depsAreSame(deps, lastDepsRef.current)) { var _unLoadRef$current; (_unLoadRef$current = unLoadRef.current) === null || _unLoadRef$current === void 0 || _unLoadRef$current.call(unLoadRef); lastElementRef.current = els; lastDepsRef.current = deps; unLoadRef.current = effect(); } }); useEffect(() => () => { var _unLoadRef$current2; (_unLoadRef$current2 = unLoadRef.current) === null || _unLoadRef$current2 === void 0 || _unLoadRef$current2.call(unLoadRef); // for react-refresh hasInitRef.current = false; }, []); }; return useEffectWithTarget; }; export default createEffectWithTarget;