vue实例在被创建之后都会经过一系列初始化步骤,如需要数据观测、模板编译、挂载实例到dom上,以及数据数据变化时更新dom,在这个过程中会运行生命周期钩子函数,以便用户在特定阶段进行响应的操作
生命周期分8个阶段:创建前后(beforecreate created)、载入前后(beforemount mounted)、更新前后(beforeupdate updated)、销毁前后(beforedestory destoryed),以及一些特殊场景的生命周期
| vue2 | vue3 | 描述 | 用途 |
|---|---|---|---|
| beforeCreate | beforeCreate | 组件实例创建之初 | 用于插件开发中执行初始化任务 |
| created | created | 组件实例完成创建 | 组件初始化完毕,可以访问各种数据获取接口数据 |
| beforeMount | beforeMount | 组件挂载之前 | |
| mounted | mounted | 组件挂载之后 | 访问dom和子组件 |
| beforeUpdate | beforeUpdate | 数据变化更新之前 | view还未更新,获取更新前的各种状态 |
| updated | updated | 数变化更新之后 | view更新后所有数据都是最新 |
| beforeDestory | beforeUnmounted | 组件实例销毁之前 | 用于一些定时器或订阅的取消 |
| destoryed | unmounted | 组件实例销毁之后 | 销毁实例,清理它与其他实例的连接,解绑他的全部指令及事件监听器 |
| activated | activated | keep-alive缓存的组件被激活时 | |
| deactivated | deactivated | keep-alive缓存组件停用时调用 | |
| errorCaptured | errorCaptured | 捕获一个来自子孙组件的错误时被调用 | |
| x | renderTracked | 调试钩子,响应式组件被收集时调用 | |
| x | renderTriggered | 调试钩子,响应式依赖被触发时调用 | |
| x | serverPrefetch | ssronly,组件实例在服务器上被渲染前调用 |
1、最早触发setup,然后beforeCreate -> init Options API -> created
2、接着判断是否有已经预编译的模板,如果有继续往下执行beforeMount,如果没有则在运行时实时编译,得到render函数,再进入beforeMount;
3、初始化render函数,创建并插入DOM节点,再执行mounted
4、监听是否有数据变化,有则re-render并更新
5、再进行卸载beforeUnmounted 和Unmounted
1、创建时依次执行
父beforeCreate -> 父created -> 父beforeMounted -> 子beforeCreate -> 子created -> 子beforeMounted -> 子mounted -> 子activated(如有keep-alive)-> 父mounted -> 父activated(如有keep-alive)
2、销毁时
父beforeDestory -> 子beforeDestory -> 子destoryed -> 父destoryed
3、更新时
父 beforeUpdate --> 子 beforeUpdate --> 子 updated --> 父 updated
销毁实例的两个钩子不一样,新增了三个钩子
图来源:vue官网
