何为生命周期钩子
官网解释:每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。
实际上,之所以叫生命周期钩子,就是在vue实例创建和执行的过程中,在每一步设置一个钩子函数,钩子函数可以理解成一个提前执行的回调函数。(ajax中 readystate也是异曲同工)
Vue的生命周期钩子
首先要注意vue的生命周期钩子是在new Vue()时,以传入对象的属性的形式进行申明。申明格式为:
生命周期钩子名:function(){}
另外需要注意的是:不能使用es6中的箭头函数申明,因为需要使用到this。
vue的生命周期钩子包括:
- beforeCreate:在实例化之后(data observer),数据观测和事件配置之前(watcher event)
- created:实例创建完成后立即调用,此时已经完成数据观测,属性和方法的运算以及watch event事件回调,但是挂载还没开始,也就是说 $el不可见。
- beforeMount:挂在开始之前调用
- mounted:挂载成功之后调用,也就是被新创建的$el替换时。
- beforeUpdate:数据变化之前
- updated:数据更新完毕且dom也刷新。
- activated:被keep-alive缓存的组件**时调用
- deactivated:被 keep-alive 缓存的组件停用时调用。
- beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用。
- destroyed:实例销毁后调用。该钩子被调用后,对应 Vue 实例的所有指令都被解绑,所有的事件监听器被移除,所有的子实例也都被销毁。
- errorCaptured:当捕获一个来自子孙组件的错误时被调用。此钩子会收到三个参数:错误对象、发生错误的组件实例以及一个包含错误来源信息的字符串。此钩子可以返回 false 以阻止该错误继续向上传播。(2.5.0新增)错误传播规则
下为官方生命周期图:
参考:https://cn.vuejs.org/v2/guide/instance.html#%E5%AE%9E%E4%BE%8B%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E9%92%A9%E5%AD%90