vue 实现setInterval 创建和销毁实例

解决方法1:

首先我在data函数里面进行定义定时器名称:

  data() {
     return { 
         timer: null // 定时器名称 
     }
  },

使用定时器

this.timer = setInterval(() => { // 某些操作 }, 1000)

最后在beforeDestroy()生命周期内清除定时器:

beforeDestroy() { 
   clearInterval(this.timer); 
   this.timer = null; 
}

方案1有两点不好的地方,引用尤大的话来说就是:

  1. 它需要在这个组件实例中保存这个 timer,如果可以的话最好只有生命周期钩子可以访问到它。这并不算严重的问题,但是它可以被视为杂物。
  2. 我们的建立代码独立于我们的清理代码,这使得我们比较难于程序化的清理我们建立的所有东西

解决方案2:【推荐】

该方法是通过$once这个事件侦听器器在定义完定时器之后的位置来清除定时器。以下是完整代码:

const timer = setInterval(() =>{ 
    // 某些定时器操作
 }, 500);
  
// 通过$once来监听定时器,在beforeDestroy钩子可以被清除。 
this.$once('hook:beforeDestroy', () => {
   clearInterval(timer); 
})
  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3中,`setInterval`通常用于周期性的执行某些操作,但当组件或Vue实例不再需要这些定时任务时,应确保正确地清除它们以避免内存泄漏。Vue本身并不直接提供一个内置的方法来处理定时器的销毁,但你可以通过以下几种方式来管理: 1. **使用ref或自定义指令**: 如果是在一个自定义指令或者组件内部使用setInterval,可以在组件的`beforeDestroy`生命周期钩子中手动清除: ```javascript export default { beforeDestroy() { this.$refs.myIntervalRef && clearInterval(this.$refs.myIntervalRef); } } ``` 2. **封装行为**: 可以将定时器的创建销毁封装到一个函数中,并在实例销毁时调用: ```javascript const startMyTimer = () => { const intervalId = setInterval(() => { // 执行你的任务 }, 1000); this.$on('beforeDestroy', () => clearInterval(intervalId)); }; startMyTimer(); ``` 3. **使用Composition API**: 在setup方法中创建并清除定时器,同样在组件卸载时处理: ```javascript import { onBeforeUnmount } from 'vue'; const { ref, onMounted } = Vue; const timerRef = ref(null); onMounted(() => { timerRef.value = setInterval(() => { // ... }, 1000); }); onBeforeUnmount(() => { timerRef.value && clearInterval(timerRef.value); }); ``` 无论哪种方法,确保在组件或实例不再需要定时任务时调用`clearInterval`是非常重要的。这样可以确保资源的合理利用,并减少内存占用。如果你有多个定时器需要管理,还可以考虑使用`useEffect`钩子结合`cleanUp`函数来实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值