vue中使用定时器setTimeout

本文分享了在VUE项目中使用setTimeout定时器遇到的问题及解决方法。详细介绍了因未清除定时器导致页面异常刷新的Bug,并提供了在组件销毁前正确清除定时器的代码示例。

今天有一个需求就是页面需要几秒中调一次请求,自然用setTimeout,然后就发现有一个Bug,明明设置的是5秒,可是页面却一直刷新,根本不是5秒,后来感觉是因为没有清除定时器,修改之后,发现是这样的,应该在VUE销毁前的钩子里面清除定时器:
这里附上一点点代码:
在这里插入图片描述
注意定时器都是有返回值的,这里推荐一个讲的很详细的定时器设置及其清除的链接:http://www.cnblogs.com/wangying731/p/5164780.html

### 如何在 Vue3 中正确使用 `setInterval` 和 `setTimeout` #### 基本概念 `setTimeout` 是用来设置一个计时器,在指定的时间(毫秒)后仅执行一次给定的回调函数[^3]。而 `setInterval` 类似于 `setTimeout`,但它会在每隔指定的时间间隔重复执行给定的函数,适用于需要定期执行的任务[^3]。 #### 手动管理定时器 如果未使用第三方工具库,则可以通过手动保存和清除定时器的方式来实现功能: ```javascript export default { data() { return { timer: null, // 存储定时器 ID }; }, mounted() { // 使用 setTimeout 实现延迟任务 this.timer = setTimeout(() => { console.log('This will run after 2 seconds'); }, 2000); // 使用 setInterval 实现周期性任务 this.timer = setInterval(() => { console.log('This runs every second'); }, 1000); }, beforeUnmount() { // 清除定时器以防内存泄漏 clearTimeout(this.timer); // 如果是 setTimeout 则清除它 clearInterval(this.timer); // 如果是 setInterval 则清除它 } }; ``` 以上代码展示了如何通过生命周期钩子 `mounted` 设置定时器以及通过 `beforeUnmount` 钩子清理它们,防止组件卸载后仍继续运行定时器造成不必要的性能开销[^4]。 #### 自动化销毁定时器的方式 为了更优雅地处理定时器问题,可以借助外部工具库如 `tools-javascript` 或者其针对不同框架定制化的版本来简化操作流程[^2]。以下是基于该工具的一个简单例子: 安装依赖: ```bash npm install tools-vue3 ``` 配置入口文件(main.js): ```javascript import { Scope } from 'tools-vue3'; import { TimerBean } from 'tools-uniapp'; // 若为 uni-app 环境需单独导入此模块 Scope.TimerBean = TimerBean; ``` 实际应用到某个 .vue 文件中的情况如下所示: ```javascript <script> import { Scope } from 'tools-vue3'; export default { setup() { const timer = Scope.Timer(); // 单次延时任务 timer.once(() => { console.log('Executed once after 2s.'); }, 2000); // 循环定时任务 timer.on(() => { console.log('Repeated execution every 2s.'); }, 2000); return {}; }, unmount() { // 不再需要显式调用 clear 方法,因为当作用域结束时会自动释放资源 } } </script> ``` 这种方式能够确保即使忘记主动去清理这些异步逻辑也不会引发潜在的风险,因为它内部已经帮我们做好了相应的机制设计[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值