生命周期篇

首先把官网的图扒下来,然后主要也是按照这个逻辑走。
5QTPMQ.md.png

生命周期图示解读

初始化阶段

new Vue()到created之间的阶段叫做初始化阶段。
这个阶段主要在Vue实例上初始化一下属性、事件以及响应式数据,如props、methods等。

注意:beforeCreate阶段,data,methods,computed,以及watch上的数据和方法都不能访问。
created阶段,实例已经创建完成,已经完成数据观测,可以使用数据,更改数据,在这里更改数据不会触发updated函数。

模板编译阶段

在created钩子函数和beforeMount钩子函数之间的阶段是模板编译阶段。
这个阶段的主要是将模板编译为渲染函数,只存在于完整版中(vue脚手架搭建的项目中)。

注意:beforeMount发送在挂载之前,在这之前template模板已经导入渲染函数编译。而当前阶段虚拟Dom已经创建完成,即将卡死渲染。在此时也可以对数据进行更改,不会触发updated。
mounted在挂载完成后发生,在当前阶段,真实的Dom挂载完毕,数据完成双向绑定,可以访问到Dom节点,使用$refs属性对Dom进行操作。

挂载阶段

beforeMount函数到mounted之间是挂载阶段。在这个阶段,Vue会将模板渲染到指定的DOM元素中。在挂载的过程中,Vue回开启Wathcer来持续追踪依赖的变化。
在已挂载的情况下,Vue仍会持续追踪状态的变化。当数据发生变化时,Watcher会通知虚拟DOM重新渲染视图,在渲染之前触发beforeUpdate,在渲染之后触发updated。

模板更新阶段

beforeUpdate到updated是更新阶段,这个阶段主要是将数据的更新反应到视图。
注意:beforUpdate发生在更新之前,也就是响应式数据发生更新,虚拟dom重新渲染之前,可以在当前阶段进行更改数据,不会导致重新渲染。
updated发生在更新完成之后,当前阶段dom已经完成了更新,要避免在这个阶段更改数据,不然可能会导致无限循环。

卸载阶段

应用调用vm.$destroy之后,vue进入卸载阶段。在这个阶段主要是将自身从父组件中删除,取消实例上所有依赖的追踪器和事件监听。
注意:卸载是在beforeDestroy中,destroyed发生在实例销毁后,这个时候只剩下了dom空壳。

额外的生命周期

如果使用组件的keep-alive功能时,增加两个周期:
activated在keep-alive组件激活时调用;
deactivated在keep-alive组件停用时调用。
keep-alive包裹动态组件时,会缓存不活动的组件实例。

posted @ 2021-10-14 14:56  卿六  阅读(60)  评论(0编辑  收藏  举报