@vue-widget/hooks
Version:
hooks from react to vue
33 lines (32 loc) • 1.38 kB
JavaScript
import { onBeforeUnmount, onMounted, unref, watch } from "vue";
import { getTargetElement } from "./domTarget";
import { getArray } from "./getArray";
var createEffectWithTarget = function (type) {
/**
*
* @param effect
* @param deps
* @param target target should compare ref.current vs ref.current, dom vs dom, ()=>dom vs ()=>dom
*/
var useEffectWithTarget = function (effect, deps, target) {
var unLoadRef;
watch([function () { return deps === null || deps === void 0 ? void 0 : deps.map(unref); }, function () { return unref(target); }], function () {
var targets = getArray(target);
var els = targets.map(function (item) { return getTargetElement(item); });
unLoadRef === null || unLoadRef === void 0 ? void 0 : unLoadRef();
unLoadRef = effect();
}, { flush: "sync", deep: true });
onMounted(function () {
return setTimeout(function () {
var targets = getArray(target);
var els = targets.map(function (item) { return getTargetElement(item); });
unLoadRef = effect();
});
});
onBeforeUnmount(function () {
unLoadRef === null || unLoadRef === void 0 ? void 0 : unLoadRef();
});
};
return useEffectWithTarget;
};
export default createEffectWithTarget;