vue中如何优雅的清除定时器
常规实现:
在vue中,你可以使用beforeDestroy生命周期钩子来优雅地清除定时器。在组件销毁前,使用clearInterval或clearTimeout方法来停止定时器。下面是一个示例代码:
export default {
data() {
return {
timer: null,
}
},
mounted() {
this.timer = setInterval(() => {}, 1000)
},
beforeDestroy() {
clearInterval(this.timer)
this.timer = null
},
}在上面的示例中,我们在mounted生命周期钩子中启动了定时器,并将定时器变量timer保存到组件的数据中。当组件销毁前,beforeDestroy生命周期钩子会被触发,我们在这个钩子中调用clearInterval方法来停止定时器。这样就可以优雅地清除定时器,避免在组件销毁后还继续执行定时器逻辑的问题。
优雅实现:
使用上面方式有两点不好的地方,引用尤大的话来说就是:
它需要在这个组件实例中保存这个 timer,如果可以的话最好只有生命周期钩子可以访问到它。这并不算严重的问题,但是它可以被视为杂物。
我们的建立代码独立于我们的清理代码,这使得我们比较难于程序化的清理我们建立的所有东西。
更好的方案是:通过$once这个事件侦听器器在定义完定时器之后的位置来清除定时器。以下是完整代码:
const timer = setInterval(() => {
// 某些定时器操作
}, 500)
// 通过$once来监听定时器,在beforeDestroy钩子可以被清除。
this.$once('hook:beforeDestroy', () => {
clearInterval(timer)
})本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!