一、是什么
Vue实例从创建到销毁经历的生命周期叫做生命周期钩子。帮助开发者介入这些阶段去组织自己的逻辑。
二、生命周期钩子分类
创建阶段的生命周期钩子:
-
beforeCreate 创建前:实例刚在内存中被创建出来,此时,还没有初始化好data 和 methods属性
-
created 创建后:实例已经在内存中创建OK,此时data和methods 已经创建OK ,此时还没有开始编译模板
-
beforeMount 载入前:此时已经完成了模板的编译,但是还没有挂载到页面中。el完成了初始化。
-
mounted 载入后:此时已经将编译好的模板挂载到了页面指定的容器中显示。
运行阶段的生命周期钩子:
- beforeUpdate 更新前:状态更新之前执行此函数,此时data中的状态值是最新的,但是界面上显示的数据还是旧数据,因为此时还没有开始重新渲染DOM节点。 【数据被更新,但未重新渲染】
- updated 更新后:实力更新完毕之后调用此函数,此时data中的状态值 和 界面上显示的数据,都已经完成了更新,界面已将被重新渲染 updated 事件执行的时候,页面和 data 数据已经保持同步,都是最新数据
销毁阶段的生命周期钩子
- beforeDestroy 销毁前: 实例销毁之前调用。在这一步,实例仍然完全可用
- destroyed 销毁后:Vue实例销毁后调用,调用后,Vue实例指示的所有东西都会解除绑定,所有的事件监听器会被移除,所有的子实例也会被销毁
父子组件 生命周期加载顺序。
三、总结
不能使用箭头函数,this问题。
如果调用 methods中的方法,或者操作data中的数据,最早只能在created中操作。
beforeMount 执行的时候,页面中的元素还没有真正被挂载替换过来,只是之前写的模板字符串。
DOM 渲染在 mounted 中就已经完成了,表示内存中的模板已经真实的挂载到了的页面中去,已经可以看到真实渲染好的页面。
mounted 是实例创建期间的最后一个生命周期函数,当执行完mounted就表示,实例已将被完全创建好了。
如果操作dom,最早在mounted中操作。
<div id="app">
<template>
<button ref="btn" @click="changeMsg"> 点我</button>
</template>
</div>
使用情况:
- beforecreate : 举个栗子:可以在这加个loading事件
- created :在这结束loading,还做一些初始化,实现函数自执行
- mounted : 在这发起后端请求,拿回数据,配合路由钩子做一些事情。
- beforeDestroy: 移除监听事件。
beforeDestroy () {
window.removeEventListener('message', this.onPostMessage);
}
四
- this --Vue实例
- this.$vnode