欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > Vue2 vs Vue3 生命周期全面对比:created 的进化与革新!!!

Vue2 vs Vue3 生命周期全面对比:created 的进化与革新!!!

2025/4/12 12:44:17 来源:https://blog.csdn.net/m0_65152767/article/details/146881848  浏览:    关键词:Vue2 vs Vue3 生命周期全面对比:created 的进化与革新!!!

🎯 Vue2 vs Vue3 生命周期全面对比:created 的进化与革新


🔥 核心差异全景图

在这里插入图片描述


一、钩子函数命名与定位变化

1. 命名规范革新

Vue2 钩子Vue3 钩子 (Options API)Vue3 Composition API
beforeCreate❌ 无setup() 替代
created✅ 保留setup() 替代
beforeDestroybeforeUnmountonBeforeUnmount
destroyedunmountedonUnmounted

关键变化解读
语义优化:Vue3 将 destroyed 改为 unmounted,更精准描述组件卸载行为
命名统一:所有钩子前缀改为 on,如 onMounted


2. created 的定位迁移

Options API
Composition API
Vue2
created: 数据初始化/异步请求
Vue3
setup(): 替代 created 的所有功能

Vue2 的 created

export default {created() {console.log('响应式数据已就绪:', this.message) // ✅ 可访问 datathis.fetchData() // 典型异步请求场景}
}

Vue3 的替代方案

import { ref } from 'vue'
export default {setup() {const message = ref('')// 🔥 直接执行相当于 createdconsole.log('响应式数据已就绪:', message.value)fetchData() // 无需通过 this 访问return { message }}
}

二、执行机制与阶段差异

1. 生命周期阶段对比

Vue2_Flow
beforeCreate → created → beforeMount → mounted
Vue3_Flow
setup() → onBeforeMount → onMounted

Vue2 顺序

父 beforeCreate → 父 created → 父 beforeMount  
→ 子 beforeCreate → 子 created → 子 beforeMount → 子 mounted  
→ 父 mounted

Vue3 特性
异步挂载优化:通过 <Suspense> 实现异步组件加载
组合式逻辑聚合setup() 合并了 beforeCreatecreated 阶段


2. 调试能力增强

Vue3 新增开发模式专用钩子:

import { onRenderTracked, onRenderTriggered } from 'vue'setup() {onRenderTracked((e) => {console.log('依赖追踪:', e) // 响应式依赖收集过程})onRenderTriggered((e) => {console.log('触发更新:', e) // 数据变更触发重新渲染})
}

三、性能优化与破坏性变更

1. 销毁阶段内存管理

操作类型Vue2 方案Vue3 优化方案
定时器清理beforeDestroyonBeforeUnmount
事件解绑destroyedonUnmounted
第三方库释放手动调用销毁方法结合 watchEffect 自动清理

代码示例

// Vue3 自动清理示例
setup() {const timer = ref(null)watchEffect((onInvalidate) => {timer.value = setInterval(() => {}, 1000)onInvalidate(() => clearInterval(timer.value)) // 自动销毁})
}

2. 异步更新机制

Vue3 采用 Proxy 实现响应式,优化更新性能:
批量更新:多个数据变更合并为单次渲染
Tree-shaking 支持:未使用的生命周期钩子不会打包


四、迁移适配指南

1. 代码改造策略

场景Vue2 写法Vue3 适配方案
数据初始化created() 中赋值setup() 直接声明响应式变量
全局事件总线EventBus.$on使用 provide/inject 或 Pinia
DOM 操作mounted() 访问 $elonMounted() + ref 引用

2. 常见问题避坑

  1. this 丢失问题
    Composition API 中不再通过 this 访问实例,需用 getCurrentInstance()
  2. 异步请求竞态
    使用 AbortControllerwatchEffect 自动取消
  3. 插件兼容性
    检查第三方库是否支持 Vue3 的 app.use() 注册方式

五、总结:技术选型建议

  1. 新项目
    • 首选 Vue3 Composition API,利用 setup() 的代码组织优势
    • 搭配 <script setup> 语法糖提升开发体验
  2. 旧项目维护
    • 渐进式迁移:单个组件改用 @vue/compat 兼容模式
    • 优先重构高频修改的组件
35% 65% Vue2 vs Vue3 生命周期使用率 (2025) Vue2 Options API Vue3 Composition API

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词