Skip to content

Vue 3

Vue 3 是渐进式 JavaScript 框架,用于构建用户界面。基于标准 HTML、CSS 和 JavaScript,提供声明式、组件化的编程模型。

官网:vuejs.org · 仓库:github.com/vuejs/core

速查卡片

内容
当前稳定版3.5.x
下一版本3.6(开发中,Vapor 模式)
发布日期2020-09-18(3.0 GA)
构建工具Vite(推荐)/ Webpack
TypeScript 支持一等支持,源码由 TS 编写
包名vue
Node 最低版本≥ 18
许可MIT
Vue 2 EOL2023-12-31(已终止)

核心特性概览

组合式 API(Composition API)

基于函数的逻辑复用与组织方式,替代 Options API 的碎片化问题。核心:ref / reactive / computed / watch / watchEffect

详见 响应式系统基础 · 组合式 API(待整理)

<script setup> 语法糖

编译时语法糖,在 SFC 中使用组合式 API 的更简洁方式。顶层绑定自动暴露给模板,无需 return

vue
<script setup lang="ts">
import { ref } from 'vue'
const count = ref(0)
</script>

<template>
  <button @click="count++">{{ count }}</button>
</template>

详见 SFC 语法规范(待整理)

响应式系统(Reactivity)

基于 ES6 Proxy 的全新响应式引擎,替代 Vue 2 的 Object.defineProperty。支持 Map/Set、数组索引、动态属性增删,无死角追踪。

详见 响应式原理深度解析(待整理)

Teleport(传送门)

将组件 DOM 渲染到指定目标节点(如 body),突破父组件 overflow: hidden / z-index 的限制。

vue
<Teleport to="body">
  <Modal />
</Teleport>

详见 Teleport(待整理)

Suspense(异步协调)

协调异步依赖(异步组件、async setup),提供加载中/完成/错误的统一处理。

vue
<Suspense>
  <AsyncDashboard />
  <template #fallback>加载中...</template>
</Suspense>

详见 Suspense(待整理)

Fragment(多根节点)

组件模板允许多个根节点,不再强制单一包裹元素。

vue
<template>
  <header>标题</header>
  <main>内容</main>
  <footer>底部</footer>
</template>

其他

特性说明文档
createApp全新应用实例 API,替代 new Vue()应用实例(待整理)
Emits 声明组件显式声明 emits,类型安全组件事件(待整理)
v-model 增强v-model、自定义修饰符组件 v-model(待整理)
异步组件defineAsyncComponent + Suspense异步组件(待整理)
Vapor Mode3.6 实验性编译策略,无虚拟 DOMVapor Mode(待整理)

知识体系导航

响应式系统

主题说明文档
ref / reactive响应式数据基础 API响应式基础
computed计算属性与缓存计算属性
watch / watchEffect侦听器侦听器(待整理)
shallowRef / shallowReactive浅层响应式浅层响应式(待整理)
toRef / toRefs解构保持响应式Ref 工具函数(待整理)
effectScope响应式作用域管理EffectScope(待整理)
响应式原理Proxy 引擎、依赖追踪、触发机制响应式原理(待整理)

组合式 API

主题说明文档
setup()组合式 API 入口setup(待整理)
生命周期钩子onMounted / onUpdated / onUnmounted生命周期(待整理)
provide / inject依赖注入依赖注入(待整理)
Composables组合式函数编写模式Composables(待整理)
useTemplateRef3.5 模板引用新方式模板引用(待整理)

组件系统

主题说明文档
Props属性声明、校验、默认值Props(待整理)
Events / defineEmits事件声明与触发组件事件(待整理)
defineModel / v-model双向绑定组件 v-model(待整理)
Slots默认插槽、具名插槽、作用域插槽插槽(待整理)
defineExpose暴露组件公开方法/属性组件暴露(待整理)
异步组件 defineAsyncComponent懒加载 + 加载状态异步组件(待整理)
动态组件 <component :is>运行时切换组件动态组件(待整理)

模板语法

主题说明文档
插值与表达式 文本插值、JS 表达式模板语法(待整理)
内置指令v-if / v-show / v-for / v-bind / v-on / v-model / v-once / v-memo / v-cloak / v-pre / v-html / v-text内置指令(待整理)
事件处理@click、修饰符(.stop / .prevent / .once 等)事件处理(待整理)
表单绑定v-model 修饰符(.lazy / .number / .trim表单绑定(待整理)
自定义指令指令钩子(created / mounted / updated 等)自定义指令(待整理)

内置组件

组件说明文档
<Transition>单元素/组件过渡动画Transition(待整理)
<TransitionGroup>列表过渡动画TransitionGroup(待整理)
<KeepAlive>缓存组件状态KeepAlive(待整理)
<Teleport>传送 DOM 到目标位置Teleport(待整理)
<Suspense>异步依赖协调Suspense(待整理)

进阶与工程化

主题说明文档
渲染函数 / JSXh() 函数、JSX 支持渲染函数(待整理)
SSR / Nuxt服务端渲染SSR(待整理)
TypeScript 集成类型推导、组件类型标注TypeScript(待整理)
插件开发app.use() 插件规范插件(待整理)
性能优化v-memoshallowRefdefineAsyncComponent性能优化(待整理)
响应式编译宏defineProps / defineEmits / defineSlots / defineModel / defineOptions编译宏(待整理)
Vapor Mode(实验)无虚拟 DOM 编译策略Vapor Mode(待整理)

快速上手

最小示例

vue
<script setup lang="ts">
import { ref } from 'vue'

const count = ref(0)
</script>

<template>
  <button @click="count++">
    Count: {{ count }}
  </button>
</template>

创建项目

bash
pnpm create vue@latest          # 官方脚手架(基于 Vite)
# 或
pnpm create vite my-app --template vue-ts

应用挂载

typescript
import { createApp } from 'vue'
import App from './App.vue'

const app = createApp(App)
app.mount('#app')

Vue 2 → Vue 3 差异对比

Vue 2 用法Vue 3 替代说明
new Vue({ ... })createApp({ ... }).mount('#app')应用实例 API 替代构造函数
.sync 修饰符v-model:propName合并进 v-model,支持多个
$listeners合并进 $attrs$attrs 包含 class / style / 事件
v-on.keyCode(如 @keyup.13❌ 移除仅支持 kebab-case 键名(如 @keyup.enter
Filters 0❌ 移除用 computed / 方法替代
v-if / v-for 优先级v-if > v-for(与 v2 相反)不推荐同时使用
单根节点限制✅ 支持多个根节点(Fragment)无需包裹 <div>
Vue.extend()❌ 移除defineComponent
$on / $off / $once(事件总线)❌ 移除mittprovide/inject
Vue.set / Vue.delete❌ 移除Proxy 响应式无需手动增删
render 函数参数h 从全局导入import { h } from 'vue'
transition class 名v-enterv-enter-fromclass 命名调整
functional 组件普通函数组件无需 functional: true
v-bind.syncv-model:prop统一为 v-model 参数
<portal><Teleport>内置组件替代第三方库

生态工具链

工具说明链接
Vite下一代前端构建工具,Vue 官方推荐vitejs.dev
PiniaVue 3 官方状态管理(替代 Vuex)pinia.vuejs.org
Vue Router官方路由router.vuejs.org
VueUse组合式工具函数集vueuse.org
Nuxt全栈 Vue 框架(SSR / SSG)nuxt.com
VitestVite 原生单元测试框架vitest.dev
Vue DevTools浏览器调试工具(支持 Vite 插件模式)devtools.vuejs.org
VolarVS Code 官方扩展(TypeScript + Vue 支持)marketplace

常见误区

  1. 直接用 Options API 就行 → Vue 3 中组合式 API 是主要推荐方式,TypeScript 推断更好、逻辑复用更自然。
  2. reactiveref 更好ref 可重新赋值且解包一致,实际开发中 ref 更通用。
  3. 解构 reactive 仍保持响应式 → 必须用 toRefs() 包装,或直接用 ref
  4. Vue 3 不兼容 Vue 2 生态 → 多数库已有 Vue 3 版本;Options API 仍可用,迁移成本可控。
  5. watchEffectwatch 一样watchEffect 自动追踪依赖,watch 需显式指定。懒执行 vs 立即执行是核心区别。
  6. v-for 不需要 key → 仍然需要,且 key 绑定在 <template v-for> 上而非子元素。

版本信息

版本发布日期关键变化
3.02020-09-18首个稳定版:Proxy 响应式、Composition API、Teleport、Suspense、Fragment
3.22021-08-09<script setup> 稳定、v-memoeffectScope
3.32023-05-11defineSlotsdefineOptions、泛型组件、toRef / toValue 增强
3.42023-12-28defineModel 稳定、v-bind 同名简写、响应式系统重构(性能提升)
3.52024-09-03useTemplateRefonWatcherCleanupuseId、响应式 Props 解构
3.6开发中Vapor Mode(无虚拟 DOM)、Suspense 稳定化

来源

来源链接
官方文档vuejs.org
源码仓库github.com/vuejs/core
发布日志vuejs.org/about/releases.html
迁移指南v3-migration.vuejs.org

最后整理:2026-07-05 · 对应 Vue 版本:3.5.x