当前位置: 首页 > news >正文

完整教程:Vue2 和 Vue3 生命周期的理解与对比

我对 Vue2 和 Vue3 生命周期的理解与对比

在日常的前端开发中,我经常会接触到组件的生命周期问题。无论是在数据请求、DOM 操作还是资源清理的场景中,生命周期都起着非常重要的作用。
我在学习 Vue 的过程中,发现 Vue2 和 Vue3 的生命周期函数 虽然本质相同,但在设计和使用方式上发生了很大的变化。
这篇文章,我想结合自己的理解,系统地总结一下 Vue2 和 Vue3 的生命周期差异与使用心得。


一、我理解的生命周期

生命周期(Lifecycle)指的是一个 Vue 组件从被创建、挂载、更新到销毁的整个过程。
Vue 为每一个阶段都提供了钩子函数(Hook),让我可以在不同的时机执行相应的逻辑,比如:

  • 在组件创建时获取数据;
  • 在挂载后操作真实的 DOM;
  • 在更新前后执行副作用;
  • 在销毁前清理定时器或事件监听器。

简单来说:

生命周期就是 Vue 帮我在“组件从生到死”的过程中,提供了多个可编程的时机点。


二、Vue2 的生命周期

在 Vue2 中,我通常使用选项式 API(Options API)来定义生命周期函数。
它的生命周期函数大致可以分为四个阶段:创建、挂载、更新和销毁。

阶段钩子函数说明
创建阶段beforeCreate实例初始化之前调用,此时 data、methods 都还未定义
创建阶段created实例创建完成,可以访问 data 和 methods,但 DOM 还未挂载
挂载阶段beforeMount模板编译完成,准备挂载到 DOM 前调用
挂载阶段mounted组件挂载完成,DOM 可操作
更新阶段beforeUpdate数据更新前调用,此时 DOM 还未更新
更新阶段updated数据更新并重新渲染后调用
销毁阶段beforeDestroy实例销毁前调用,常用于解绑事件、清理定时器
销毁阶段destroyed实例销毁后调用,组件完全被移除

我理解的生命周期流程图:

beforeCreate → created → beforeMount → mounted → beforeUpdate → updated → beforeDestroy → destroyed

示例代码:

export default {
data() {
return { count: 0 }
},
beforeCreate() {
console.log('beforeCreate:组件实例刚被创建')
},
created() {
console.log('created:实例已创建,可访问 data')
},
mounted() {
console.log('mounted:DOM 已挂载')
},
beforeUpdate() {
console.log('beforeUpdate:数据更新前')
},
updated() {
console.log('updated:DOM 已更新')
},
beforeDestroy() {
console.log('beforeDestroy:组件即将销毁')
},
destroyed() {
console.log('destroyed:组件已销毁')
}
}

在 Vue2 中,生命周期函数通过对象属性定义,逻辑会分散在不同的选项里。当项目变得复杂时,逻辑复用和管理会变得困难。


三、Vue3 的生命周期

当我开始学习 Vue3 时,最直观的变化就是引入了 Composition API(组合式 API)
生命周期的定义方式也随之改变,从“对象式定义”转变为“函数式调用”。

阶段Vue2 写法Vue3 写法说明
创建前beforeCreate❌ 移除,逻辑在 setup() 中实现
创建后created❌ 移除,逻辑在 setup() 中实现
挂载前beforeMountonBeforeMount组件挂载前调用
挂载后mountedonMounted组件挂载后调用
更新前beforeUpdateonBeforeUpdate组件更新前调用
更新后updatedonUpdated组件更新后调用
销毁前beforeDestroyonBeforeUnmount组件卸载前调用
销毁后destroyedonUnmounted组件卸载后调用

示例代码:

<script setup>
import { ref, onMounted, onUpdated, onUnmounted } from 'vue'
const count = ref(0)
onMounted(() => {console.log('onMounted:组件已挂载')
})
onUpdated(() => {console.log('onUpdated:组件已更新')
})
onUnmounted(() => {console.log('onUnmounted:组件已卸载')
})
</script>

在 Vue3 中,beforeCreatecreated 已经被合并到 setup() 阶段。
我可以在 setup() 内直接访问 props、定义响应式变量、监听生命周期。


四、Vue2 与 Vue3 生命周期对比总结

生命周期阶段Vue2Vue3(组合式 API)
创建前beforeCreate❌(已移除)
创建后created❌(已移除)
挂载前beforeMountonBeforeMount
挂载后mountedonMounted
更新前beforeUpdateonBeforeUpdate
更新后updatedonUpdated
销毁前beforeDestroyonBeforeUnmount
销毁后destroyedonUnmounted
错误捕获errorCapturedonErrorCaptured
keep-alive 激活activatedonActivated
keep-alive 失活deactivatedonDeactivated

五、我对 Vue3 生命周期的看法

我认为 Vue3 在生命周期的设计上更符合逻辑复用的需求。
几个我非常喜欢的改进包括:

  1. 逻辑更加集中:
    所有的生命周期都可以在 setup() 中统一管理,逻辑清晰。

  2. 类型提示更友好:
    在使用 TypeScript 时,onMounted()onUpdated() 等函数能获得完整类型支持。

  3. 组合逻辑更强大:
    我可以把生命周期逻辑封装进自定义 Hook 中,比如 useFetchuseMouse 等,更方便复用。

  4. 更贴近函数式编程思想:
    生命周期的调用方式像 React Hooks,函数式开发体验更好。


六、我的总结

对比项Vue2Vue3
核心写法选项式 API组合式 API
生命周期入口beforeCreatecreatedsetup()
生命周期命名英文过去式(mountedon + 生命周期名(onMounted
灵活性逻辑分散,复用较难逻辑集中,易于复用
类型支持强(天然支持 TypeScript)

七、结语

通过学习和使用 Vue3 的生命周期,我感受到它的设计更加现代化。
它不再是简单的钩子函数堆叠,而是一种可组合、可复用的逻辑组织方式。

如果说 Vue2 是一种“配置式开发”,那么 Vue3 更像是一种“逻辑式开发”。
我认为这也是前端框架演进的趋势:让开发者能更清晰地表达逻辑关系,而不是被固定的结构限制。

总结一句话:
Vue3 的生命周期让我的代码更简洁、更模块化,也更有乐趣。


作者:韩佳俊
时间:2025-11-03
前端开发工程师 · 持续学习中

http://www.jsqmd.com/news/357105/

相关文章:

  • 5步完美解决Arduino ESP32开发环境配置故障:从诊断到优化的完全指南
  • springboot过程材料零食购物网站 开题报告
  • 数字内容访问工具深度评测:技术原理与工具选择全指南
  • 3个颠覆性技巧:用Apollo Save Tool实现PS4存档自由的核心方法
  • springboot教学质量开题报告
  • 自动化预约工具:技术架构与实战应用
  • 设计效率革命:探索Illustrator脚本如何重塑创意工作流
  • 设计自动化效率革命:3个秘诀让你的设计效率提升5倍
  • 3个脚本解放90%机械劳动:设计师的AI效率革命
  • springboot服装贸易购物商城开题报告
  • applera1n激活锁绕过技术解决方案:高效使用指南
  • springboot校友同学录系统_开题报告
  • 1. 突破设备壁垒:开源无线音频传输技术的跨平台实践
  • Windows 11系统定制与轻量优化:革命性工具打造极简方案
  • Python字节码提取与反编译工具实战指南:从EXE文件解析到pyc文件修复全流程
  • 3步打造个人视频图书馆:B站高清内容永久保存与无限制访问指南
  • BilibiliDown视频下载工具全攻略:从高效获取到智能管理
  • 如何将Windows音频无线传输到安卓设备:打造无拘无束的音频共享体验
  • 高效获取B站音频:BilibiliDown无损保存全攻略
  • 视频离线工具全攻略:从问题诊断到高级应用
  • 3个维度解锁XNBCLI:从资源解密到创意开发的技术探险
  • 设计流程智能化:Illustrator脚本如何重构创意工作流
  • springboot毕设开题报告基于JavaWeb的驾校考试模拟系统
  • 如何提升英雄联盟游戏体验:League Akari工具集的全方位应用指南
  • 5个技巧让无线音频传输实现跨设备低延迟共享:AudioShare完全指南
  • springboot计算机组成原理学习网站 开题报告
  • 7步实现信息自由:新一代付费内容访问工具全解析
  • N8N教程:2026最新N8N自动化工作流配置使用完整指南
  • ESP32安装失败系统性修复:从根本解决到长期避坑指南
  • 视频格式转换高效解决方案:从技术原理到跨平台实践指南