Vue生命周期,理解流程图

最近在看Vue的生命周期,就把各个流程写了一遍,观察各个阶段虚拟dom树和真实dom树的渲染情况
每一个组件或者实例都会经历一个完整的生命周期,总共分为三个阶段:初始化、运行中、销毁

  1. 实例、组件通过new Vue() 创建出来之后会初始化事件和生命周期,然后就会执行beforeCreate钩子函数,这个时候,数据还没有挂载到,只是一个空壳,无法访问到数据和真实的dom,一般不做操作
  2. 挂载数据,绑定事件等等,然后执行created函数,这个时候已经可以使用到数据,也可以更改数据,在这里同步更改数据不会触发updated函数,一般可以在这里做初始数据的获取。 做异步ajax,绑定初始化事件
  3. 接下来开始找实例或者组件对应的模板,编译模板为虚拟dom放入到render函数中准备渲染,然后执行beforeMount钩子函数,在这个函数中虚拟dom已经创建完成,马上就要渲染,在这里也可以更改数据,不会触发updated,这是在渲染前最后一次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始化数据的获取
  4. 接下来开始render,渲染出真实dom,然后执行mounted钩子函数,此时,组件已经出现在页面中,数据、真实dom都已经处理好了,事件都已经挂载好了,可以在这里操作真实dom等事情…
  5. 当组件或实例的数据更改之后,会立即执行beforeUpdate,然后vue的虚拟dom机制会重新构建虚拟dom与上一次的虚拟dom树利用diff算法进行对比之后重新渲染,一般不做什么事儿
  6. 当更新完成后,执行updated,数据已经更改完成,dom也重新render完成,可以操作更新后的dom
  7. 当经过某种途径调用$destroy方法后,立即执行beforeDestroy,一般在这里做一些善后工作,例如清除计时器、清除非指令绑定的事件等等
  8. 组件的数据绑定、监听…去掉后只剩下dom空壳,这个时候,执行destroyed,在这里做善后工作也可以
三大阶段

组件的声明周期钩子函数大致可以分为三个阶段: 初始化、运行中、销毁

​ 初始化阶段;beforeCreate() created(可以获取数据) beforeMount (render) mounted

​ 运行中阶段:beforeUpdate updated

​ 销毁阶段: beforeDestroy destroyed

代码示例:

 /*
            组件从创建到销毁的一系列过程叫做组件的声明周期。
            vue在整个生命周期里面提供了一些函数,可以在内部实现一些业务逻辑,
            并且这些函数会在一些特定的场合下去执行。(在生命周期的某一个时刻进行触发)
            
            组件的声明周期钩子函数大致可以分为三个阶段: 初始化、运行中、销毁
            初始化阶段;beforeCreate() created(可以获取数据) beforeMount (render)  mounted
            运行中阶段:beforeUpdate updated
            销毁阶段:  beforeDestroy destroyed
        */

        //1.一个组件或者实例的什么周期都是从new开始的。
        //2.实例化之后,内部就会做一些初始化事件与生命周期相关的配置
        Vue.component("my-component",{
            template:"#my-component",
            data(){
                return {
                    msg:"hello"
                }
            },
            //3.这个钩子函数初始化阶段就会触发执行
            //数据获取不到,并且真实dom也获取不到
            beforeCreate(){
                console.log("beforeCreate...")
                console.log(this.msg,document.getElementById("title"))
            },
            //4.created钩子函数代表数据已经挂载完毕,但是真实dom节点还是没有渲染出来。
            //通常在这个钩子函数里面,我们可以进行初始化的一些事件绑定与进行ajax异步请求
            //注意:在这个钩子函数里面,如果同步的更改数据的话,是不会影响到运行时钩子函数执行
            created(){
                console.log("created...")
                console.log(this.msg,document.getElementById("title"))
            },
            //5.接下来的过程,就是组件或者实例去查找各自的模板,将其编译成虚拟dom
            //6.beforeMount代表真实dom马上要被渲染出来了,但是页面中还没有生成真实dom
            //beforeMount与created钩子函数用法基本一致,也可以进行初始化事件绑定与ajax请求
            beforeMount(){
                console.log("beforeMount...")
                console.log(this.msg,document.getElementById("title"))
            },
            //生成好了虚拟dom了,然后在render函数里面将虚拟dom进行初始化渲染成真实dom树
            //相当于在render函数里面做了一个初始化渲染的操作    
            // render(){
            //     console.log("render...")
            // }
            //7.mounted钩子函数是初始化阶段的最后一个钩子函数
            //数据已经挂载完毕了,并且真实的dom元素也已经生成好了
            //一般可以进行一些实例化操作 --> 拖拽
            mounted(){
                console.log("mounted...")
                console.log(this.msg,document.getElementById("title"))
            }
        })
        new Vue().$mount("#app");
生命周期流程图

在这里插入图片描述

照着官网的图片自己做了一个流程图,有点简陋,凑合着看啊!
还有喜欢前端技术的同学可以加QQ577873333,随时在线啊!!

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,我无法显示图片或流程图。但我可以为您提供Vue2的生命周期方法及其顺序: 1. beforeCreate:实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。 2. created:实例创建完成,数据观测 (data observer) 和 event/watcher 事件配置完成之后被调用。在这一步,实例已完成以下配置:数据观测 (data observer),属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没有开始,$el 属性目前不可见。 3. beforeMount:在挂载开始之前被调用:相关的 render 函数首次被调用。 4. mounted:el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。实例已完成以下配置:用上面编译好的模板替换掉了el属性指向的DOM对象。完成了模板中的所有指令和插值表达式的解析。将data中的数据和模板中的DOM节点建立了联系,开始了数据的渲染。此时组件已经被渲染到页面上。 5. beforeUpdate:数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。可以在该钩子中进一步地更改数据,不会触发附加的重渲染过程。 6. updated:由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后组件 DOM 已更新。当这个钩子被调用时,你的组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。但是在大多数情况下,你应该避免在此期间执行大量工作,因为这可能会导致性能问题。 7. beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用。 8. destroyed:实例销毁之后调用。该钩子被调用后,Vue实例解除了所有事件监听器和所有子实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值