关于vue3项目定时器无法关闭的情景处理

专业干饭人2024-12-05 14:02:36

最近遇到一个问题,那就是我在某个页面上设置了定时器,但是当我离开这个页面时,这个定时器还在刷。

intervalID = ref("");
onMounted(() => {
  intervalID.value = setInterval(function () {
    getOrder();
  }, 3000);
});

就是上面这段代码,设置定时器自动获取订单,当我离开此页面进入其他页面时发现这个定时器还在不断的刷,这显然不是我想要的。

解决办法:

1、设置路由守卫,路由跳转时,删除定时器

onBeforeRouteLeave(async (to, from, next) => {
 //...其他逻辑
 clearInterval(intervalID.value); //确定退出 清除定时器
});

这个办法并不是很有效,有时候并不是跳转页面,而是关闭页面

2、钩子函数,卸载销毁

onUnmounted(() => {
  // 页面卸载时清除计时器
  if (intervalID.value) {
    clearTimeout(intervalID.value);
    intervalID.value = null;
  }
});

问题解决。
当我们学习vue的生命周期时候,很容易忽略卸载钩子函数,其实,卸载函数还是可以做很多事的。