Vue的生命周期

12 篇文章 0 订阅

 

 vue的整个生命周期从new Vue也就是创建实例开始 - 初始化数据 - 编译模板 - 挂载dom - (渲染 - 更新 - 渲染)- 销毁至此结束,每一个实例与组件都会经历一个完整的生命周期:初始化、运行中、销毁。

 1、new Vue会初始化事件和生命周期。beforeCreate执行,数据还没有挂载,所以此时无法访问数据和dom,一般代码中不做任何操作。

2、初始化状态,挂载到当前实例的一些属性,执行created函数,此时data数据已完成挂载,所以可以访问并更改数据,但是更改的数据不会被updated函数拦截。这里我们可以在渲染前做一下页面数据的更改,或者实现ajax请求获取动态数据。

3.接下来寻找实例或者组件的对应模板节点,这个时候完成编译模板为虚拟Dom准备渲染。然后执行beforeMount函数。这个函数中我们也可以做一些数据的访问与修改,也同样不会被updated函数拦截,这是渲染完成前最后一次修改数据的机会

4、开始render,渲染出真实dom,然后执行mounted函数,此时,组件dom节点已经出现在页面中,数据、真实dom都已经处理好了,事件都已经挂载好了,可以在这里操作真实dom等事情...

5、当组件或实例的数据更改之后,会立即执行beforeUpdate,然后vue的虚拟dom机制会重新构建虚拟dom与上一次的虚拟dom树利用diff算法进行对比之后重新渲染,一般不做什么事

6、当更新完成后,执行updated,数据已经更改完成,dom也重新render完成,可以操作更新后的虚拟dom

7、当经过某种途径调用$destroy方法后,立即执行beforeDestroy,一般在这里做一些善后工作,例如清除计时器、清除非指令绑定的事件等等

 8、组件的数据绑定、监听...去掉后只剩下dom空壳,这个时候,执行destroyed,在这里做善后工作也可以

注:VUE3中 beforeDestroy 和 destroyed 替换为 beforeUnmount 和 unmounted

    new Vue({
        el:"#app",
        data:{
            myname:"",
        },
        // template:"",new vue其实就是根组件,与组件一样支持template属性。vue会优先编译template属性,覆盖el指定的节点。一般不写
        beforeCreate(){
            console.log(this.myname);//此时vue实例刚刚创建,data数据没有挂载 还是一个空壳,结果:undefined
        },
        created(){
            console.log(this.myname);//初始化状态已完成,当前实例的一些属性已挂载,此时可以做一些数据的初始化操作,axios请求页面初始化数据,这里做的一切操作都不会触发updated
        },
        beforeMount(){
            //编译模板为虚拟dom完成,准备渲染
            //可以在模板解析之前做最后一次修改,一般不需要
        },
        mounted(){
            //此时拿到真实的dom节点,事件挂载完成
            //可以进行真实dom节点等操作,比如依赖dom创建之后才进行初始化的插件
            //发起ajax等
            console.log("beforeCreate、created、beforeMount、mounted这四个在整个生命周期中只执行一次");
        },
        beforeUpdate(){
            //在updated触发之前触发。这里可以记录更新之前的老数据,一般没啥用
        },
        updated(){
            //更新完成,获取更新的dom节点
        },
        //beforeDestroy(){
            //销毁前执行($destroy方法被调用的时候就会执行),一般在这里善后:清除计时器、清除非指令绑定的事件等等...
        //},
        //destroyed(){
            //这时实例的属性,绑定的事件都已经去掉,只剩下一个dom空壳。这里也可以做一些善后的工作
        //}
        //VUE3中替换了destroyed和berforeDestroy:
        beforeUnmount(){
            //销毁前执行($destroy方法被调用的时候就会执行),一般在这里善后:清除计时器、清除非指令绑定的事件等等...
        },
        unmounted(){
            //这时实例的属性,绑定的事件都已经去掉,只剩下一个dom空壳。这里也可以做一些善后的工作
        },
    })

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值