vue中清除定时器

欢迎访问我的博客https://qqqww.com/,祝码农同胞们早日走上人生巅峰,迎娶白富美~~~

@TOC

1 前言

最近看《vue.js实战》这本书,看到清除定时器在beforeDestroy钩子函数中进行,但是按照经验,我记得destroyed中也是可以的,于是自己建了一个vue-cli工程去研究清除定时器的一些方法

2 方式一

export default {
        data() {
            return {
                timer: null
            }
        },
        created() {
            this.getBanner()
            console.log('created')
        },
        mounted() {
            console.log('mounted')
            this.timer = setInterval(() => {
                console.log('1')
            }, 500);
        },
        updated() {
            console.log('updated')
        },
        beforeDestroy() {
            console.log('beforeDestroy' + '==========' + this.timer)
            // clearInterval(this.timer)
        },
        destroyed() {
            console.log('destroyed' + '=========' + this.timer)
            clearInterval(this.timer)
        }
}

在页面挂在的时候设置了一个定时器,首先看看钩子函数的场景,createdmounted在页面渲染的时候就都会执行出来,具体看控制台打印,当数据更新,执行updated,然后我做了个路由跳转,将该页面跳转到另外一个页面,此时控制台打印beforeDestroy==========54destroyed=========54,可见当页面跳转完成,这两个钩子函数都会执行,所以我在这两个地方分别尝试去清除定时器,都是可以的

3 方式二

去网上找到一种方法,利用$once监听

const timer = setInterval(() =>{                    
    // 某些定时器操作                
}, 500);            
// 通过$once来监听定时器,在beforeDestroy钩子可以被清除。
this.$once('hook:beforeDestroy', () => {            
    clearInterval(timer);                                    
})

看了很多文档,都推荐方式二,但始终没搞明白为什么方式二就好

4 缓存

然后尝试使用keep-alive对组件进行缓存,发现并不能销毁,这是destroyed是不执行的,若要清除定时器只能在beforeDestroy

5 参考文档

推荐阅读更多精彩内容

  • 从感性的角度讲,我是不屑于用VUE,觉得react套件用起来更顺手,但是vue现在越来火,所以也不得入vue(杂烩...
    zhoulujun阅读 1,087评论 0 1
  • 33、JS中的本地存储 把一些信息存储在当前浏览器指定域下的某一个地方(存储到物理硬盘中)1、不能跨浏览器传输:在...
    萌妹撒阅读 936评论 0 2
  • 前言 记录平时学到的知识,标题写的大气一点,也算是给自己一点鼓励,希望在技术这条路可以远走越远,路越走越宽~ 文中...
    徐国军_plus阅读 1,206评论 3 28
  • ## 框架和库的区别?> 框架(framework):一套完整的软件设计架构和**解决方案**。> > 库(lib...
    Rui_bdad阅读 2,251评论 1 4
  • 一:什么是闭包?闭包的用处? (1)闭包就是能够读取其他函数内部变量的函数。在本质上,闭包就 是将函数内部和函数外...
    xuguibin阅读 6,868评论 1 51