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) // ✅ 可访问 data
    this.fetchData() // 典型异步请求场景
  }
}

Vue3 的替代方案

import { ref } from 'vue'
export default {
  setup() {
    const message = ref('')
    // 🔥 直接执行相当于 created
    console.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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值