vue-hooks-plus
Version:
Vue hooks library
40 lines (39 loc) • 1.54 kB
JavaScript
const vue = require("vue");
const depsAreSame = require("./depsAreSame");
const domTarget = require("./domTarget");
const _interopDefaultLegacy = (e) => e && typeof e === "object" && "default" in e ? e : { default: e };
const depsAreSame__default = /* @__PURE__ */ _interopDefaultLegacy(depsAreSame);
const createEffectWithTarget = (useEffectType) => {
const useEffectWithTarget = (effect, deps, target) => {
const hasInitRef = vue.ref(false);
const lastElementRef = vue.ref([]);
const lastDepsRef = vue.ref([]);
const unLoadRef = vue.ref();
useEffectType(() => {
var _a;
const targets = Array.isArray(target) ? target : [target];
const els = targets.map((item) => domTarget.getTargetElement(item));
if (!hasInitRef.value) {
hasInitRef.value = true;
lastElementRef.value = els;
lastDepsRef.value = deps;
unLoadRef.value = effect();
return;
}
if (els.length !== lastElementRef.value.length || !depsAreSame__default.default(els, lastElementRef.value) || !depsAreSame__default.default(deps, lastDepsRef.value)) {
(_a = unLoadRef.value) == null ? void 0 : _a.call(unLoadRef);
lastElementRef.value = els;
lastDepsRef.value = deps;
unLoadRef.value = effect();
}
});
vue.onUnmounted(() => {
var _a;
(_a = unLoadRef.value) == null ? void 0 : _a.call(unLoadRef);
hasInitRef.value = false;
});
};
return useEffectWithTarget;
};
module.exports = createEffectWithTarget;
;