使用 @vueuse/core封装的方法,传递一个函数,监听一个boolean值
import { MaybeComputedRef, resolveRef, useIntervalFn } from '@vueuse/core';
import { watch } from 'vue';
type RequetFunction = (...args: any[]) => any;
/**
* 卡片轮询
* @param reqFn 获取数据函数
* @param isInterval 轮询开始/停止
* @param interval 间隔 @default 5000
*/
const usePoolingReq = (
reqFn: RequetFunction,
isInterval: MaybeComputedRef<boolean> = true,
interval = 3000,
) => {
const isIntervalCpt = resolveRef(isInterval);
const { pause, resume, isActive } = useIntervalFn(reqFn, interval, {
immediateCallback: true,
});
watch(
isIntervalCpt,
(val) => {
if (val) {
// eslint-disable-next-line no-unused-expressions
!isActive.value && resume();
} else {
pause();
}
},
{ immediate: true },
);
};
export default usePoolingReq;
const isInterval = ref(true);
usePoolingReq(getParamsData, () => isInterval.value);
// 取消时
isInterval.value=true