Vue2 vs Vue3

Vue 2 与 Vue 3 的主要区别可以从以下几个方面对比:

1. 架构重构

  • Vue 2 :基于 Options API,使用 Object.defineProperty 实现响应式
  • Vue 3 :基于 Composition API(兼容 Options API),使用 Proxy 实现响应式

2. 响应式系统

javascript 复制代码
// Vue 2 - Object.defineProperty
data() {
  return {
    count: 0
  }
}

// Vue 3 - Proxy
import { ref, reactive } from 'vue'

const count = ref(0)
const state = reactive({ name: 'Vue 3' })
  • 优势:Proxy 能检测到属性的添加/删除,数组索引和长度变化

3. Composition API vs Options API

vue 复制代码
<!-- Vue 2 Options API -->
<script>
export default {
  data() {
    return { count: 0 }
  },
  methods: {
    increment() { this.count++ }
  },
  mounted() { console.log('mounted') }
}
</script>

<!-- Vue 3 Composition API -->
<script setup>
import { ref, onMounted } from 'vue'

const count = ref(0)
const increment = () => count.value++

onMounted(() => {
  console.log('mounted')
})
</script>

4. 性能提升

  • 打包体积:Vue 3 体积减小约 40%(Tree-shaking 优化)
  • 渲染速度:初始渲染快 55%,更新快 133%
  • 内存占用:减少约 50%

5. TypeScript 支持

  • Vue 2:需要额外的装饰器或复杂配置
  • Vue 3:原生 TypeScript 支持,更好的类型推断

6. 新特性

Fragment

vue 复制代码
<!-- 可包含多个根节点 -->
<template>
  <header></header>
  <main></main>
  <footer></footer>
</template>

Teleport

vue 复制代码
<template>
  <teleport to="body">
    <!-- 将组件渲染到 body 下 -->
    <Modal />
  </teleport>
</template>

Suspense

vue 复制代码
<template>
  <Suspense>
    <template #default>
      <AsyncComponent />
    </template>
    <template #fallback>
      <div>Loading...</div>
    </template>
  </Suspense>
</template>

7. API 变化

生命周期

Vue 2 Vue 3 (Options API) Vue 3 (Composition API)
beforeCreate ❌ 使用 setup setup
created ❌ 使用 setup setup
beforeMount beforeMount onBeforeMount
mounted mounted onMounted
beforeUpdate beforeUpdate onBeforeUpdate
updated updated onUpdated
beforeDestroy beforeUnmount onBeforeUnmount
destroyed unmounted onUnmounted

全局 API

javascript 复制代码
// Vue 2
Vue.component()
Vue.directive()
Vue.mixin()

// Vue 3 - 改为应用实例
const app = createApp(App)
app.component()
app.directive()

8. v-model 改进

vue 复制代码
<!-- Vue 2:每个组件只能有一个 v-model -->
<ChildComponent v-model="value" />

<!-- Vue 3:支持多个 v-model -->
<ChildComponent 
  v-model:title="title"
  v-model:content="content"
/>

9. 事件 API

javascript 复制代码
// Vue 2
this.$on('event', handler)
this.$emit('event', data)

// Vue 3 - 推荐使用第三方库(如 mitt)或 Provide/Inject

10. 迁移建议

  • 新项目:直接使用 Vue 3 + Composition API
  • 老项目
    • 小项目:建议升级
    • 大项目:逐步迁移或使用 Vue 2.7(包含部分 Vue 3 特性)

总结

Vue 3 在性能、开发体验和维护性方面都有显著提升,特别适合大型项目和需要更好 TypeScript 支持的项目。Composition API 提供了更好的逻辑组织和复用能力。

相关推荐
黑白两客1 小时前
Vue 缓存机制
前端·vue.js·缓存
Luna-player1 小时前
Vue 组件,用来实现一个响应式图标网格布局,核心是用 CSS 实现固定宽高比的正方形容器,并在里面放置图片和文字。
前端·css·vue.js
SuperEugene2 小时前
Vue keep-alive 实战避坑:include/exclude + 路由 meta 标记,中后台路由缓存精准可控|状态管理与路由规范篇
开发语言·前端·javascript·vue.js·缓存·前端框架
被考核重击2 小时前
虚拟列表(动态高度,性能优化,骨架屏)
javascript·vue.js·性能优化·虚拟列表
踩着两条虫3 小时前
AI 驱动的 Vue3 应用开发平台 深入探究(二十二):CLI与工具链之开发与生产工作流
前端·vue.js·ai编程
Ankkaya3 小时前
大师助我,electron-hiprint 源码梳理
前端·vue.js
踩着两条虫3 小时前
AI 驱动的 Vue3 应用开发平台 深入探究(二十三):API与参考之Engine API 参考
前端·vue.js·ai编程
apcipot_rain3 小时前
事无巨细地解释一个vue前端网页
前端·javascript·vue.js
米丘3 小时前
vue-router 5.x 文件式路由
前端·vue.js
敲代码的约德尔人3 小时前
Vue 3 响应式系统完全指南:我在 4 个项目中踩坑后总结的血泪经验
前端·vue.js