vue3新增哪些内容以及api更改了哪些

好问题 👍,Vue3 相比 Vue2 变化还是挺大的,可以从 新增特性API 变更 两方面来总结。


📌 Vue3 新增内容

1. Composition API

  • setup() 入口函数
  • ref()reactive()computed()watch()watchEffect()
  • 生命周期钩子改为 onMountedonUnmounted 等(函数形式)
  • 提供更好的逻辑复用(取代了 Vue2 的 mixins)

2. 新内置组件

  • <Teleport>:把组件内容渲染到 DOM 的其他地方(比如全局的 modal)
  • <Suspense>:异步组件加载时显示 fallback UI
  • <Fragment>:可以返回多个根节点,不再强制要求只有一个根节点

3. 性能优化

  • 虚拟 DOM 重写 → 更快的 diff 算法(Block Tree)
  • 更小的打包体积 → tree-shaking 支持(没用到的 API 不会打包进去)
  • 按需监听ref / reactive 只跟踪被访问过的属性

4. 新的响应式系统

  • 基于 Proxy 实现(取代 Vue2 的 Object.defineProperty
  • 能完整支持数组、Map、Set 等复杂数据结构

5. 新的应用实例 API

  • createApp() 取代 new Vue()
  • app.mount('#app')
  • 支持多个 app 实例共存(Vue2 全局单例)

6. TypeScript 支持更好

  • Composition API 设计上就是为了更好支持 TS 类型推导
  • defineProps / defineEmits(Vue3.2 引入的 <script setup>

📌 Vue3 API 改动/删除的地方

1. 全局 API 变更

Vue2:

scss 复制代码
Vue.use()
Vue.mixin()
Vue.component()
Vue.directive()
Vue.filter()

Vue3 → 全部移动到应用实例上:

scss 复制代码
const app = createApp(App)
app.use()
app.mixin()
app.component()
app.directive()
// Vue3 已移除 filter

2. 生命周期钩子名称

  • Vue2: beforeCreatecreated

  • Vue3: 对应在 setup() 里实现(没有再单独的 API)

  • 其他生命周期变成组合式 API:

    • beforeMountonBeforeMount
    • mountedonMounted
    • beforeUpdateonBeforeUpdate
    • updatedonUpdated
    • beforeDestroyonBeforeUnmount
    • destroyedonUnmounted

3. v-model 改动

  • Vue2:
ini 复制代码
<input v-model="msg">

等价于:

ini 复制代码
: value="msg"
@input="msg = $event"
  • Vue3:
    默认绑定 modelValue,触发 update:modelValue 事件:
ini 复制代码
<MyInput v-model="msg" />

等价于:

ini 复制代码
: modelValue="msg"
@update:modelValue="msg = $event"

支持多个 v-model

ini 复制代码
<MyInput v-model:title="title" v-model:content="content" />

4. 自定义指令

  • bindbeforeMount
  • insertedmounted
  • update → 移除,直接用 updated
  • componentUpdated → 移除
  • unbindunmounted

5. 过滤器 (filter) 移除

  • Vue2 里可以 {{ msg | capitalize }}
  • Vue3 已删除 → 推荐用 computedmethods

6. 异步组件写法

Vue2:

javascript 复制代码
const AsyncComp = () => import('./Comp.vue')

Vue3:

javascript 复制代码
import { defineAsyncComponent } from 'vue'
const AsyncComp = defineAsyncComponent(() => import('./Comp.vue'))

7. <math xmlns="http://www.w3.org/1998/Math/MathML"> o n / on / </math>on/off / $once 被移除

Vue3 不再提供事件总线(Event Bus),推荐使用:

  • mitt 第三方库
  • 或者 provide/inject
  • 或 Vuex/Pinia 这种状态管理

📌 总结对比表

功能点 Vue2 Vue3
实例创建 new Vue() createApp()
响应式实现 Object.defineProperty Proxy
生命周期 created/mounted/... setup + onMounted 等
逻辑复用 mixins Composition API
v-model value + input modelValue + update:modelValue
全局 API Vue.xxx app.xxx
过滤器 支持 移除
异步组件 import() defineAsyncComponent
多根节点 不支持 支持(Fragment)
事件总线 this.$on 移除(用 mitt/Pinia)

相关推荐
hxjhnct7 小时前
CSS的模块化
前端·css
qq_401967387 小时前
element-plus table组件 封装列隐藏功能,并非 v-if 或 v-for,通过tableRef 与样式控制
javascript·vue.js·elementui
web小白成长日记7 小时前
Vue3+ElementUI树形菜单:构建层次化用户界面
前端·microsoft·ui·面试·elementui
徐同保7 小时前
react组件内添加一个全局点击时间,点击函数能区分是否是某个特定的id的dom触发的
前端·javascript·react.js
前端 贾公子12 小时前
v-if 与 v-for 的优先级对比
开发语言·前端·javascript
小二·16 小时前
Pinia 完全指南:用 TypeScript 构建可维护、可测试、可持久化的 Vue 3 状态管理
javascript·vue.js·typescript
bug总结16 小时前
Vue3 实现后台管理系统跳转大屏自动登录功能
前端·javascript·vue.js
用户479492835691516 小时前
同事一个比喻,让我搞懂了Docker和k8s的核心概念
前端·后端
烛阴16 小时前
C# 正则表达式(5):前瞻/后顾(Lookaround)——零宽断言做“条件校验”和“精确提取”
前端·正则表达式·c#
C_心欲无痕16 小时前
浏览器缓存: IndexDB
前端·数据库·缓存·oracle