技术文档中心
首页
React
Vue
TypeScript
Kotlin
React Native
Electron
Android
首页
React
Vue
TypeScript
Kotlin
React Native
Electron
Android
  • Vue2 基础

    • Vue 学习指南
    • Vue2 快速入门
    • Vue2 模板语法
    • Vue2 组件基础
    • Vue2 计算属性与侦听器
    • Vue2 生命周期
  • Vue2 进阶

    • Vue2 组件通信
    • Vue2 插槽详解
    • Vue2 混入与自定义指令
    • Vue2 过渡与动画
    • Vuex 状态管理
  • Vue2 高级

    • Vue2 性能优化
    • Vue2 服务端渲染(SSR)
    • Vue2 源码解析
  • Vue3 基础

    • Vue3 快速入门
    • Vue3 Composition API
    • Vue3 响应式系统
    • Vue3 组件基础
    • Vue3 生命周期
  • Vue3 进阶

    • Vue3 组合式函数
    • Vue3 组件通信
    • Vue3 Teleport 与 Suspense
    • Pinia 状态管理
    • Vue Router 4
  • Vue3 高级

    • Vue3 TypeScript
    • Vue3 性能优化
    • Vue3 测试
    • Vue3 SSR
    • Vue3 源码解析
  • 实战项目

    • Vue2 实战项目
    • Vue3 实战项目
    • Vue2 迁移 Vue3

Vue2 迁移 Vue3

主要变化

全局 API

// Vue2
import Vue from 'vue'
Vue.use(VueRouter)

// Vue3
import { createApp } from 'vue'
const app = createApp(App)
app.use(router)

生命周期

// Vue2
beforeDestroy() {}
destroyed() {}

// Vue3
beforeUnmount() {}
unmounted() {}

v-model

<!-- Vue2 -->
<MyComponent v-model="value" />
<!-- 等同于 -->
<MyComponent :value="value" @input="value = $event" />

<!-- Vue3 -->
<MyComponent v-model="value" />
<!-- 等同于 -->
<MyComponent :modelValue="value" @update:modelValue="value = $event" />

多个 v-model

<!-- Vue3 -->
<MyComponent
  v-model:title="title"
  v-model:content="content"
/>

移除的功能

  • $on、$off、$once
  • filters
  • $children
  • inline-template

新增功能

  • Composition API
  • Teleport
  • Suspense
  • Fragments
  • Emits 选项

迁移步骤

1. 升级依赖

yarn add vue@3
yarn add vue-router@4
yarn add vuex@4  # 或 pinia

2. 更新入口文件

// main.js
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'

createApp(App)
  .use(router)
  .use(store)
  .mount('#app')

3. 更新路由

import { createRouter, createWebHistory } from 'vue-router'

const router = createRouter({
  history: createWebHistory(),
  routes
})

4. 更新 Vuex

import { createStore } from 'vuex'

const store = createStore({
  state: {},
  mutations: {},
  actions: {}
})

5. 组件迁移

使用 Composition API 重写:

<script setup>
import { ref, computed, onMounted } from 'vue'

const count = ref(0)
const double = computed(() => count.value * 2)

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

迁移工具

# 安装迁移构建版本
yarn add @vue/compat

# vite.config.js
export default {
  resolve: {
    alias: {
      vue: '@vue/compat'
    }
  }
}
最近更新: 2026/1/27 15:51
Contributors: hailong
Prev
Vue3 实战项目