Vue生命周期,本质是Vue实例从创建到销毁的完整过程,每个阶段都会触发对应的钩子函数(生命周期钩子),开发者可通过这些钩子,在不同时机执行所需逻辑(如初始化数据、操作DOM、清理资源等)。核心分为「创建、挂载、更新、销毁」四大阶段,Vue2与Vue3的生命周期整体逻辑一致,但钩子名称、使用方式有差异,以下分版本详细解析,兼顾理论与实操,让新手也能快速上手、高效运用。

无论Vue2还是Vue3,生命周期都围绕「实例从生到死」展开,四大核心阶段不可逆,每个阶段的钩子函数只执行一次(更新阶段除外,可多次触发):
Vue2使用选项式API,生命周期钩子共8个,按执行顺序排列,无需额外导入,直接写在组件选项中即可使用,每个钩子的作用清晰,适配日常开发场景。
核心:初始化实例、数据观测,此时DOM尚未生成,无法操作DOM。
核心:将实例渲染到页面,生成真实DOM,此时可正常操作DOM。
核心:当data中的响应式数据发生变化时,触发该阶段,仅更新变化的部分,无需重新渲染整个页面。
核心:实例被销毁(如组件卸载),需清理资源,避免内存泄漏。
Vue2 生命周期执行顺序(必记)
beforeCreate → created → beforeMount → mounted → (数据变化)beforeUpdate → updated → (实例销毁)beforeDestroy → destroyed
Vue3兼容Vue2的选项式API(生命周期用法与Vue2一致),但更推荐使用组合式API(setup语法糖),组合式API的生命周期钩子需手动导入,名称以“on”开头,核心逻辑与Vue2完全一致,只是使用方式更灵活、轻量化。
用法和Vue2完全一致,仅替换2个钩子名称(语义更准确),其余钩子功能、执行顺序完全相同:
<script>export default { data() { return { count: 0 } }, beforeCreate() { /* 实例创建前 */ }, created() { /* 实例创建后 */ }, beforeMount() { /* 挂载前 */ }, mounted() { /* 挂载后 */ }, beforeUpdate() { /* 更新前 */ }, updated() { /* 更新后 */ }, beforeUnmount() { /* 卸载前(替代beforeDestroy) */ }, unmounted() { /* 卸载后(替代destroyed) */ }}</script>组合式API的生命周期钩子需从vue中导入,名称以“on”开头,与Vue2的钩子一一对应,函数式调用,更贴合组合式开发逻辑,常用钩子如下(按执行顺序):
补充:Vue3新增2个调试用钩子(onRenderTracked、onRenderTriggered),日常开发几乎不用,仅用于调试响应式数据的渲染跟踪。
<script setup>import { ref, onMounted, onBeforeUnmount } from 'vue'const count = ref(0)let timer = null// 挂载后:初始化定时器(常用场景)onMounted(() => { timer = setInterval(() => { count.value++ }, 1000)})// 卸载前:清理定时器(避免内存泄漏,常用场景)onBeforeUnmount(() => { clearInterval(timer)})</script>| 对比维度 | Vue2 | Vue3 |
|---|---|---|
| API类型 | 仅支持选项式API | 兼容选项式,推荐组合式(setup) |
| 钩子名称(销毁阶段) | beforeDestroy、destroyed | beforeUnmount、unmounted(选项式);onBeforeUnmount、onUnmounted(组合式) |
| 钩子使用 | 无需导入,直接写在组件选项中 | 组合式需导入,函数式调用,更灵活 |
| 核心优势 | 兼容旧项目,逻辑直观,上手简单 | 轻量化,开发效率高,支持调试钩子 |
Vue生命周期就是“实例从创建到销毁”的全过程,核心是四大阶段+对应钩子,Vue2侧重选项式、兼容旧项目,Vue3兼容选项式、推荐组合式,记住“挂载后操作DOM、销毁前清理资源”,就能覆盖90%的开发场景,新手也能快速上手。