vue使用setInterval、setTimeout总结

本文介绍了一种在前端项目中有效管理定时器(setInterval)的方法,避免了因页面切换导致的定时器累积问题。通过在methods中定义定时器,并在mounted钩子中将其存放到sessionStorage里,再检查并清除重复的定时器,确保了每个页面只运行一个定时器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人前端菜鸟,在项目中由于没有用websocket,所以要定时调用后台接口获取数据所以用到了setInterval定时器,在离开页面的时候浏览器不会自动清除定时器,然后再回到这个页面的时候又会执行一个定时器,这样会导致定时器越来越多,这样是肯定不行的,经过查资料后总计一下简单的解决办法,要解决离开页面结束定时器的问题需要配置路由,这个暂时没研究。

在methods中定义一个定时器,在定时器内执行需要定时执行的方法:

在mounted中调用定时器存放到sessionStorage里,然后在判断sessionStorage里是否有定时器,如果有先清除,这样就不会有多个定时器执行了。

setTimeout也会存在一样的问题,执行完之后还是会存在,所以也要先清除掉。

### Vue 中 `setInterval` 和 `setTimeout` 的区别及用法 #### 基本概念 JavaScript 提供了两种主要的定时器函数:`setTimeout` 和 `setInterval`。前者用于一次性延迟执行某个任务,而后者则会按照指定时间间隔重复执行某项任务。 - **`setTimeout`**: 该方法会在指定的毫秒数后调用一次给定的函数[^2]。它适用于仅需执行单次异步操作的情况。 - **`setInterval`**: 此方法每隔一定时间就会自动调用一次给定的函数。适合于需要周期性运行的任务。 #### Vue中的具体实现方式 ##### 使用 `setTimeout` 在 Vue 组件中,可以通过在其生命周期钩子(如 `mounted()`)内定义并初始化一个 `setTimeout` 调度程序来处理某些特定时刻的操作: ```javascript export default { data() { return { timer: null, }; }, mounted() { this.timer = setTimeout(() => { console.log('This will run after a delay of one second.'); }, 1000); }, beforeDestroy() { clearTimeout(this.timer); // 清除定时器以防内存泄漏 this.timer = null; } }; ``` 上述代码展示了如何设置以及清理一个简单的超时计时器[^3]。 ##### 使用 `setInterval` 对于持续性的动作,则可采用 `setInterval` 方法,在组件挂载阶段设定好循环逻辑,并同样记得在销毁前停止这些轮询过程以免造成不必要的性能消耗: ```javascript export default { data() { return { intervalId: null, counter: 0, }; }, methods: { incrementCounter() { this.counter += 1; console.log(`Current Counter Value is ${this.counter}`); } }, mounted() { this.intervalId = setInterval(this.incrementCounter, 1000); }, beforeDestroy() { clearInterval(this.intervalId); // 确保离开页面时清除interval this.intervalId = null; } }; ``` 这里通过不断更新变量counter展示了一个每秒钟增加数值的例子。 #### 主要差异对比表 | 特性 | `setTimeout` | `setInterval` | |-------------------|------------------------------------|-------------------------------------| | 执行次数 | 只执行一次 | 循环多次直到被显式终止 | | 是否需要手动控制结束 | 不需要特别关注 | 需要在适当时候主动clear | #### 注意事项 无论是哪种情况都需要注意的是,在Vue应用里创建任何全局范围内的对象或者绑定事件都应该考虑其生命周期管理问题;当组件卸载之后应该及时释放资源以防止潜在的风险比如内存泄露等问题发生^。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值