vue-hooks-plus
Version:
Vue hooks library
42 lines (41 loc) • 929 B
JavaScript
const vue = require("vue");
function useInterval(fn, delay, options) {
const immediate = options == null ? void 0 : options.immediate;
const fnRef = vue.ref(fn);
const timerRef = vue.ref(null);
const setupInterval = () => {
if (vue.isRef(delay)) {
if (typeof delay.value !== "number" || delay.value < 0)
return;
} else {
if (typeof delay !== "number" || delay < 0)
return;
}
if (immediate) {
fnRef.value();
}
const _deply = vue.unref(delay);
timerRef.value = setInterval(() => {
fnRef.value();
}, _deply);
};
const clear = () => {
if (timerRef.value) {
clearInterval(timerRef.value);
}
};
const restart = () => {
clear();
setupInterval();
};
vue.watchEffect((onInvalidate) => {
setupInterval();
onInvalidate(clear);
});
return {
clear,
restart
};
}
module.exports = useInterval;
;