Vue2和Vue3的生命周期有许多相似之处,但也存在着一些差异。具体分析如下:
一、Vue2生命周期详解
1. beforeCreate:在实例初始化之后,数据观测(data observer) 和事件/监听器(event/watcher) 尚未被设置。
2. created:实例创建完成,此阶段已完成 data、methods、computed 属性等的初始化,但尚未挂载 DOM,$el属性目前不可见。
3. beforeMount:挂载开始之前被调用,此时模板编译已经完成,$el已创建,但尚未挂载到 DOM 中。
4. mounted:实例被挂载到 DOM 上之后调用,可以访问到 DOM 节点,并进行相关操作。
5. beforeUpdate:数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。
6. updated:由于数据更改导致的虚拟 DOM 重新渲染和打补丁之后调用。
7. beforeDestroy:实例销毁之前调用,可以进行善后清理工作。
8. destroyed:实例被销毁后调用,所有的事件监听器都会被移除,子实例也会被销毁。
二、Vue3生命周期详解
1. onBeforeMount:与 Vue2 的 `beforeMount` 类似,在挂载前调用。
2. onMounted:与 Vue2 的 `mounted` 类似,在元素挂载到 DOM 后立即调用。
3. onBeforeUpdate:与 Vue2 的 `beforeUpdate` 类似,在数据更新前调用。
4. onUpdated:与 Vue2 的 `updated` 类似,在数据更新后立即调用。
5. onBeforeUnmount:与 Vue2 的 `beforeDestroy` 类似,在卸载前调用。
6. onUnmounted:与 Vue2 的 `destroyed` 类似,在卸载后立即调用。
7. onActivated:仅在 keep-alive 组件激活时调用。
8. onDeactivated:仅在 keep-alive 组件停用时调用。
9. onErrorCaptured:当捕获一个来自子孙组件的错误时调用。
10. onRenderTracked:调试钩子,跟踪虚拟节点渲染。
11. onRenderTriggered:调试钩子,当触发组件的渲染时调用。
12. onServerPrefetch:仅在服务器端渲染期间调用,用于获取数据。
总的来说,Vue3 的生命周期钩子函数命名有所改变,以 "on" 为前缀,使其更具一致性和可读性。在使用 Vue3 时,需要根据新命名调整代码。虽然部分钩子函数的名称发生了变化,但它们的功能和执行时机基本保持一致。一些新的生命周期钩子函数如 `onRenderTracked`、`onRenderTriggered`、`onActivated` 和 `onDeactivated` 被引入,以适应新的 Composition API 和 keep-alive 组件的需求。