对Vue生命周期的简单理解

vue的生命周期是什么

  • 当vue被创建的时候有自己的生命周期,就像Java的对象被创建的时候一样,有着自己的生命周期。
  • new一个vue对象以后,就有了创建、数据初始化、挂载、更新、销毁这些生命周期。
  • 而vue允许我们在这期间使用钩子函数来做更多的事情。
  • 如: b e f o r e C r e a t e 、 c r e a t e d 、 b o f o r e M o u n t 、 m o u n t e d ( b e f o r e U p d a t e 、 u p d a t e d ) 、 b e f o r e D e s t r o y 、 d e s t r o y e d beforeCreate、created、boforeMount、mounted(beforeUpdate、updated)、beforeDestroy、 destroyed beforeCreatecreatedboforeMountmountedbeforeUpdateupdatedbeforeDestroydestroyed
  • 值得强调的是,很多钩子函数在生命周期中只能被调用一次,有些可以被多次调用,如beforeCreate就只被调用一次。

请添加图片描述

首先构造函数生成vue实例 ↓

在这里插入图片描述

事件和生命周期钩子初始化。 ↓

在这里插入图片描述
这时钩子函数 b e f o r e C r e a t e beforeCreate beforeCreate被调用;也就是说在实例初始化之后,数据观测 ( d a t a o b s e r v e r ) 和 e v e n t / w a t c h e r (data observer)和event/watcher dataobserverevent/watcher事件卑职之前被调用。 ↓

new Vue({
    
    
    el: '#app',
    data: {
    
    },
    beforeCreate: function () {
    
    
        console.log('beforeCreate');
    }
})

在这里插入图片描述

接着初始化inject provide state属性 。 ↓

在这里插入图片描述

接下来create钩子函数被调用;它在实例创建完成之后被立即调用;在这一步,实例已完成以下的配置:数据观测(data observer),属性和方法的运算,watch/event的事件回调;然而,挂载阶段还没有开始,$el属性目前不可见。 ↓

new Vue({
    
    
    el: '#app',
    data: {
    
    },
    created: function(){
    
    
        console.log('created');
    },
})

在这里插入图片描述

判断是否有el对象,如果有继续判断是否有模板,如果没有就挂载对象、然后在判断是否有模板。 ↓

在这里插入图片描述

如果有模板,就把模板转化为render函数,通过render函数去渲染创建dom数;
如果没有模板,就编译el对象外层html作为模板;

在这里插入图片描述

这时钩子函数beforeMount被运许调用,它在被挂载前被调用render函数首次被调用生成虚拟的dom。也就是说在挂载开始之前被调用:先关的渲染函数首次被调用。 ↓

new Vue({
    
    
    el: '#app',
    data: {
    
    },
    beforeMount:function(){
    
    
        console.log('beforeMount')
    }
})

在这里插入图片描述

接下来创建vue实例下的$el(虚拟) 并将其替换真正的dom; ↓

在这里插入图片描述

钩子函数mounted被允许调用;挂载完成,dom树已经完成渲染到页面,可进行dom操作;
el 被新创建的 vm.$el 替换,挂载成功; ↓

new Vue({
    
    
    el: '#app',
    data: {
    
    },
    mounted:function(){
    
    
        console.log('mounted')
    }
})

在这里插入图片描述

当数据有被更新的时候调用钩子函数beforeUpdate 或者 更新以后调用钩子函数updated。 ↓

在这里插入图片描述
更新数据时调用 :

new Vue({
    
    
    el: '#app',
    data: {
    
    },
    beforeUpdate:function(){
    
    
        console.log('beforeUpdate')
    }
})

组件dom 已经更新,组件更新完毕调用:

new Vue({
    
    
    el: '#app',
    data: {
    
    },
    updated:function(){
    
    
        console.log('updated')
    }
})

在生命周期销毁之前还可以调用访问实例的数据,需要调用钩子函数beforeDestory; ↓

new Vue({
    
    
    el: '#app',
    data: {
    
    },
    beforeDestory:function(){
    
    
        console.log('beforeDestory')
    }
})

在这里插入图片描述

销毁的时候需要做,清除watcher、子组件事件监听器等… ↓

在这里插入图片描述

销毁以后可以调用destroyed钩子函数,之后整个生命周期就结束了。 ↓

new Vue({
    
    
    el: '#app',
    data: {
    
    },
    destroyed:function(){
    
    
        console.log('destroyed')
    }
})

在这里插入图片描述

Guess you like

Origin blog.csdn.net/Lazy_Goat/article/details/120884396