1、什么是vue生命周期?   

 Vue 实例从创建到销毁的过程,就是生命周期。

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

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

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

2.1  挂载(初始化相关属性)

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

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

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

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

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

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

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

2.3  销毁(销毁相关属性)

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

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

3、Vue实例的产生过程

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

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

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

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

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

⑥ updated 由于数据更改导致的虚拟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 中就已经完成了。

Logo

基于 Vue 的企业级 UI 组件库和中后台系统解决方案,为数万开发者服务。

更多推荐