当前位置: 首页 > 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><template><div><p>{ count }</p><button @click="count++">点击增加</button></div>
</template>

在 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.dtcms.com/a/565114.html

相关文章:

  • WinRAR“转换格式”功能详解:一键切换压缩包格式
  • 个人网站备案备注写什么济宁网站建设 企诺
  • 生活琐记(12)初七之月
  • 动态自优化的认知医疗层次激励编程技术架构(2025.10版)
  • 【005】使用DBeaver备份与还原mysql数据库
  • 生活方式与肥胖风险:多维度数据分析与预测模型研究
  • 南宁网站建设哪家好分销网站建设方案
  • 产品开发与创新方法论的系统应用与协同价值
  • 平衡二叉树-力扣
  • 常州工厂网站建设网站布局优化策略
  • 向量数据库对比
  • 配置Ubuntu20.04 x64平台上使用vcpkg交叉编译到Ubuntu20.04 ARM64的环境
  • Cocos Creator 和 Unity 3D 编辑界面字体样式大小调整
  • TensorFlow 2.x常用函数总结(持续更新)
  • 《备忘录模式:软件设计中的经典模式解析与应用》
  • meta-llama-3-8B下载失败解决。
  • [N_154]基于springboot酒店预订管理系统
  • 从语音唤醒到边缘智能:ESP32-S3 + TensorFlow Lite Micro 的技术潜力
  • wordpress 订阅号推送乐陵网站优化
  • 【LeetCode 每日一题】1768. 交替合并字符串
  • 大模型长文生成中的幻觉与事实性:研究进展综述
  • 在苹果设备上安装描述文件的完整步骤指南
  • 展示形网站怎么建自己可以制作微信小程序吗
  • Qwen3-VL微调自定义OCR任务
  • 【5】理解GUID和Handle:解锁UEFI驱动和应用程序的钥匙
  • [手机AI开发sdk] docs | AidLearning平台(四合一环境)
  • CTFHub XSS通关:XSS-过滤关键词
  • Java设计模式精讲---简单工厂模式
  • Spring Boot + EasyExcel 枚举转换器:通用方案
  • Pandas-之数据合并与连接