vue生命周期

​​​​1、什么是vue生命周期?   

生命周期是指一个组件从创建 -> 运行 -> 销毁的整个阶段,强调的是一个时间段

从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、销毁等一系列过程,称之为 Vue 的生命周期。

生命周期函数:是由vue框架提供的内置函数,会伴随着组件的生命周期,自动按次序执行

注意:生命周期函数强调的是时间段生命周期函数强调的是时间点 

2、vue生命周期总共有几个阶段?

3个阶段

总共分为8个过程:创建前/后, 载入前/后,更新前/后,销毁前/后。

vue运行原理

一个vue组件本质上也是一个vue实例,webpack从main.js开始执行

                                                 

webpack发现main.js中用到了App组件,package.json中的 "vue-template-compiler"开始解析渲染App根组件,

                                                 

在解析App根组件时,它也会编译创建App根组件中使用的MyProduct和MyChild两个组件,

若MyProduct和MyChild组件中使用了其他组件,则它也会继续创建。

最终webpack解析出一棵DOM树,然后进行编译转换成纯 js 文件,插入首页中由浏览器进行解析与渲染

                                                         

2.1  创建

① beforeCreate(创建前):数据观测和初始化事件还未开始。     

② created(创建后):完成数据观测,属性和方法的运算,初始化事件,$el属性还没有显示出来。  

 可以理解为template中使用一个组件就创建一个Vue实例  

beforeCreate()函数不重要,因为用不了props、data、methods 

-------------------------------------------------------------------------------------------------------------------------------- 

created()阶段可以使用props、data、methods的数据

可以发起Ajax请求获取数据

Ajax请求成功后获取到的数据将会被渲染到模板结构中

---------------------------------------------------------------------------------------------------------------------------------

 但是 create() 阶段模板结构还未生成,所以不能在此阶段操作DOM元素

 


 判断是否有 el 选项

  <===>  

③ beforeMount(载入前):在挂载开始之前被调用,相关的render函数首次被调用。实例已完成以下的配置:编译模板,data里面的数据和模板生成html。注意此时还没有挂载html到页面上。

 由于beforeMount()阶段还没有渲染模板结构,也无法操作DOM元素,所以该阶段也不重要

④ mounted(载入后):在el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用。实例已完成以下的配置:用上面编译好的html内容替换el属性指向的DOM对象。完成模板中的html渲染到html页面中。(第一次把DOM结构渲染好

总结

服务器数据请求最早可以在created()阶段

操作DOM元素最早可以在mounted()阶段

2.2  运行(元素或组件的变更操作)

⑤ beforeUpdate(更新前):在数据更新之前调用,发生在虚拟DOM重新渲染和打补丁之前。可以在该钩子中进一步地更改状态,不会触发附加的重复渲染过程。     

⑥ updated(更新后):在由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。调用时,组件DOM已经更新,所以可以执行依赖于DOM的操作。然而在大多数情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用。   

运行阶段的函数最少执行0次,最多执行无数次

2.3  销毁(销毁相关属性)

⑦ beforeDestroy(销毁前):在实例销毁之前调用。实例仍然完全可用。     

⑧ destroyed(销毁后):在实例销毁之后调用。调用后,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务器端渲染期间不被调用。

 

3、Vue实例的产生过程

① beforeCreate 在实例初始化之后,数据观测和事件配置之前被调用。

created 在实例创建完成后被立即调用。

props、data、methods都可用

③ beforeMount 在挂载开始之前被调用。

mounted el被新创建的vm.$el替换,并挂载到实例上去之后调用该钩子。

第一次把DOM结构渲染好,可以第一次操作DOM元素

⑤ beforeUpdate 数据更新时调用,发生在虚拟DOM打补丁之前。

updated 由于数据更改导致的虚拟DOM重新渲染和打补丁,在这之后会调用该钩子。

可以操作最新的更新过后的DOM

⑦ beforeDestroy 实例销毁之前调用。

⑧ destroyed 实例销毁后调用
 

new Vue

(1)new Vue会调用Vue原型链上的_init方法对Vue实例进行初始化;

(2)首先是初始化生命周期,对Vue实例内部的一些属性(children、parent、isMounted)进行初始化;

(3)initEvents,初始化当前实例上的一些自定义事件(Vue.$on);

(4)解析slots绑定在Vue实例上,绑定createElement方法在实例上;

(5)完成对生命周期、自定义事件等一系列属性的初始化后,触发生命周期钩子beforeCreate;

(6)在初始化data和props之前完成依赖注入;

(7)完成对data和props的初始化,同时对属性完成数据劫持内部,启用监听者对数据进行监听(更改);

(8)对依赖注入进行解析;

(9)完成对数据的初始化后,触发生命周期钩子created;

(10)进入挂载阶段,将vue模板语法通过vue-loader解析成虚拟DOM树,虚拟DOM树与数据完成双向绑定,触发生命周期钩子beforeMount;

(11)将解析好的虚拟DOM树通过vue渲染成真实DOM,触发生命周期钩子mounted。

4、vue生命周期的作用是什么?  

它的生命周期中有多个事件钩子,让我们在控制整个Vue实例的过程时更容易形成好的逻辑。    

5、第一次页面加载会触发哪几个钩子?  

会触发 下面这几个beforeCreate, created, beforeMount, mounted 。

6、DOM 渲染在 哪个周期中就已经完成?

DOM 渲染在 mounted 中就已经完成了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值