面试技巧:
要展开说,不能仅仅说那几个钩子函数。
Vue生命周期的定义
Vue实例从创建到销毁的过程就是Vue的生命周期,即指从创建、初始化数据、编译模板、挂载DOM→渲染、更新→渲染、卸载等一系列的过程。
Vue生命周期的阶段
它一共分四个阶段,不同阶段有不同的钩子函数:
- 创建阶段
- beforeCreate(组件实例创建之初)
初始化好了一个Vue的空实例对象,上面只有默认的事件和生命周期,其他东西都未创建,data、methods、computed、watch都没有配置。 - created(组件实例已经完全创建)
data、methods、computed、watch都已经配置完成: 可以访问data中的数据;可以调用methods中的方法;可以通过computed和watch完成数据计算。
- beforeCreate(组件实例创建之初)
- 挂载阶段
- beforeMount(组件挂载到实例上去之前)
Vue已经编辑了模板,将虚拟DOM转化成真实DOM,但并没有把它挂载到页面中。 - mounted(组件挂载到实例上去之后)
vm.$el已经创建完成,它生成的DOM替换了el选项所对应的DOM。
- beforeMount(组件挂载到实例上去之前)
- 更新阶段
- beforeUpdate(组件数据更新之前)
data虽然更新了,但是view层没有更新。 - updated(组件数据更新之后)
生成了新的虚拟DOM,它和老的虚拟DOM进行比较,找到两个虚拟DOM的最小差异后进行异步更新,然后再与真实DOM比较后对真实DOM更新。此时data和view层都是最新的。
- beforeUpdate(组件数据更新之前)
- 销毁阶段
- beforeDestroy(组件实例销毁之前)
data、methods、computed、watch仍能使用,还没有真正执行销毁的过程。 - destroyed(组件实例销毁之后)
移除了watcher、所有子组件、事件监听器。
- beforeDestroy(组件实例销毁之前)
此外还有一些特殊场景的生命周期:
- 与keep-alive有关的两个特殊的钩子函数
- activated(keep-alive缓存的组件激活时调用)
- deactivated(keep-alive缓存的组件停用时调用)
当组件被激活时,触发activated钩子函数;当组件被移除时,触发deactivated钩子函数。
- 与组件异常捕获有关的一个钩子函数
errorCaptured
可以捕获一个来自子孙组件的错误。