Vue3介绍
Vue3 是 Vue.js 框架的第三个主要版本,于 2020 年正式发布,相比 Vue2 进行了全面重构,在性能、可维护性、扩展性等方面有显著提升。它保留了 Vue 一贯的“渐进式框架”理念,同时引入了诸多现代前端技术特性,以下从核心特性、架构变化、常用 API 等方面详细介绍:
一、核心特性与优势
-
性能大幅提升
- 响应式系统重构:从 Vue2 的
Object.defineProperty改为基于Proxy的响应式系统,支持监听数组索引、对象新增属性等 Vue2 中难以处理的场景,且避免了递归遍历对象的性能损耗。 - 编译时优化:通过“静态标记”区分模板中的静态节点(如纯文本、无绑定的标签)和动态节点,减少虚拟 DOM Diff 时的对比开销;支持“按需更新”,仅重新渲染受影响的节点。
- 更小的体积:移除了 Vue2 中不常用的 API(如
filter),通过 Tree-Shaking 支持按需引入,核心库体积比 Vue2 减少约 40%。
- 响应式系统重构:从 Vue2 的
-
更好的 TypeScript 支持
- Vue3 源码采用 TypeScript 编写,原生支持类型定义,解决了 Vue2 中使用 TypeScript 时类型推断不足的问题。
- 组件、Props、生命周期等 API 均提供完整的类型提示,开发工具(如 VS Code + Volar)可实现更精准的代码补全和错误检查。
-
Composition API(组合式 API)
- 替代 Vue2 中 Options API(选项式 API)的核心创新,允许按逻辑功能组织代码,而非按
data、methods、computed等选项拆分。 - 解决了 Vue2 中大型组件代码分散、复用困难的问题,通过
setup函数或<script setup>语法实现更灵活的逻辑组合。
- 替代 Vue2 中 Options API(选项式 API)的核心创新,允许按逻辑功能组织代码,而非按
二、核心 API 与语法
1. Composition API 核心函数
-
setup函数:组件初始化时执行,是 Composition API 的入口,返回值可直接在模板中使用。export default { setup() { const count = ref(0); // 响应式变量 const increment = () => count.value++; // 方法 return { count, increment }; // 暴露给模板 } }; -
响应式 API:
ref:创建基本类型(String/Number/Boolean)的响应式变量,通过.value访问/修改值。reactive:创建对象/数组的响应式变量,直接通过属性访问(无需.value),但不支持解构(会丢失响应式)。toRefs:将reactive对象转为ref对象集合,方便解构后保持响应式。computed:创建计算属性,支持只读和可写两种模式。const doubled = computed(() => count.value * 2); // 只读 const fullName = computed({ get: () => `${firstName.value} ${lastName.value}`, set: (val) => { /* 自定义设置逻辑 */ } });
-
生命周期钩子:
Vue3 用组合式 API 替代了 Vue2 的选项式生命周期(如mounted),需从vue中导入并在setup中调用:import { onMounted, onUpdated, onUnmounted } from 'vue'; setup() { onMounted(() => console.log('组件挂载完成')); onUpdated(() => console.log('组件更新完成')); onUnmounted(() => console.log('组件卸载完成')); } -
依赖注入:
provide和inject替代 Vue2 的provide/inject选项,支持跨层级组件通信:// 父组件提供数据 import { provide } from 'vue'; setup() { provide('theme', 'dark'); } // 子组件注入数据 import { inject } from 'vue'; setup() { const theme = inject('theme'); }
2. 模板语法增强
-
多根节点:Vue3 支持组件模板包含多个根节点(Fragment),无需外层包裹
<div>。<template> <h1>标题</h1> <p>内容</p> </template> -
指令增强:
v-model支持多个双向绑定,且可自定义修饰符:<ChildComponent v-model:title="pageTitle" v-model:content="pageContent" />v-if与v-for优先级调整:v-if现在可以直接访问v-for的迭代变量。
3. <script setup> 语法糖
- 简化
setup函数的写法,是 Vue3 推荐的组件写法,自动将顶层变量和函数暴露给模板,无需手动返回。<script setup> import { ref } from 'vue'; const count = ref(0); const increment = () => count.value++; </script> <template> <button @click="increment">{{ count }}</button> </template> - 支持通过
defineProps、defineEmits声明组件的 Props 和事件,类型提示更友好。
三、架构与生态变化
-
模块化设计
Vue3 采用模块化架构,将核心功能拆分为独立包(如@vue/reactivity负责响应式、@vue/compiler-core负责编译),允许开发者按需引入,甚至在非 Vue 项目中复用部分功能(如用@vue/reactivity实现响应式)。 -
自定义渲染器(Custom Renderer)
Vue3 支持通过自定义渲染器将模板渲染到不同目标(如 Canvas、WebGL 或原生应用),例如vue3-canvas-renderer可将 Vue 组件渲染到 Canvas 上,拓展了 Vue 的应用场景。 -
生态工具升级
- Vue Router 4:适配 Vue3,支持 Composition API,路由参数可通过
useRoute访问。 - Pinia:替代 Vuex 成为官方推荐的状态管理库,简化 API,原生支持 TypeScript,无需嵌套
modules。 - Vite:Vue 作者开发的构建工具,基于 ES 模块原生支持实现快速热更新,成为 Vue3 项目的首选构建工具。
- Vue Router 4:适配 Vue3,支持 Composition API,路由参数可通过
四、与 Vue2 的主要区别
| 特性 | Vue2 | Vue3 |
|---|---|---|
| 响应式系统 | Object.defineProperty |
Proxy |
| 核心 API | Options API 为主 | Composition API 为主 |
| 模板根节点 | 必须单一根节点 | 支持多根节点(Fragment) |
| TypeScript 支持 | 需额外配置,类型提示有限 | 原生支持,类型系统完善 |
| 状态管理 | Vuex | Pinia(官方推荐) |
| 构建工具 | Webpack 为主 | Vite 为主(更快的热更新) |
| 生命周期命名 | beforeCreate、mounted 等 |
onBeforeMount、onMounted 等(需导入) |
五、适用场景
- 大型应用:Composition API 有助于组织复杂逻辑,TypeScript 支持提升可维护性。
- 性能敏感场景:编译时优化和响应式重构使 Vue3 更适合高性能需求(如数据可视化、复杂表单)。
- 跨平台开发:结合
uni-app或Vue Native,可用于移动端混合开发。
Vue3 是对 Vue 框架的一次全面升级,既保留了 Vue 易学易用的特点,又解决了 Vue2 在大型项目中的痛点,目前已成为新项目的首选版本。对于 Vue2 开发者,可通过逐步迁移(如先使用 composition-api 插件过渡)适应 Vue3 的新特性。
Vue3开发框架
Vue 3 生态中,核心框架和工具围绕其新特性(如组合式 API、TypeScript 支持、性能优化等)构建,形成了完整的技术栈。以下是 Vue 3 的核心框架及工具:
一、核心基础框架
-
Vue 3 核心库
Vue 3 本身是整个生态的基础,相比 Vue 2 有重大升级:- 基于
Proxy实现响应式系统,解决 Vue 2 响应式的局限性(如监听新增属性、数组索引变化等)。 - 引入 组合式 API(Composition API),通过
setup、ref、reactive、watch等函数更灵活地组织组件逻辑,替代传统 Options API。 - 支持 TypeScript 原生集成,提供更完善的类型校验。
- 编译阶段优化(如静态提升、PatchFlag),大幅提升渲染性能。
- 基于
-
Vue Router 4
Vue 3 官方路由库,与 Vue 3 深度适配:- 支持组合式 API,可通过
useRouter、useRoute在组件中获取路由实例。 - 路由配置支持 TypeScript 类型提示。
- 优化导航守卫、路由匹配逻辑,支持更灵活的路由懒加载。
- 支持组合式 API,可通过
二、状态管理框架
-
Pinia
Vue 官方推荐的状态管理库(Vuex 的继任者),专为 Vue 3 设计:- 移除 Vuex 中的
Mutation,直接在Action中修改状态(支持同步和异步操作)。 - 原生支持 TypeScript,无需额外类型声明。
- 与组合式 API 无缝集成,可通过
useStore轻松在组件中访问状态。 - 模块化设计更简洁,每个
store都是独立模块,无需嵌套。
- 移除 Vuex 中的
-
Vuex 4(过渡方案)
Vuex 的 Vue 3 适配版本,保留 Vuex 核心概念(State、Getter、Mutation、Action、Module),但官方更推荐使用 Pinia。
三、构建与工程化工具
-
Vite
由 Vue 作者尤雨溪开发的新一代构建工具,是 Vue 3 项目的首选:- 基于浏览器原生 ES 模块(ESM),启动速度比 Webpack 快 10-100 倍,支持毫秒级热更新(HMR)。
- 零配置支持 Vue 3 单文件组件(SFC)、TypeScript、CSS 预处理器等。
- 构建产物体积更小,性能更优。
-
Vue CLI 5(兼容方案)
Vue 官方脚手架的最新版本,支持 Vue 3,但逐渐被 Vite 替代。适用于需要 Webpack 生态的项目。
四、UI 组件库(Vue 3 专属)
-
Element Plus
Element UI 的 Vue 3 升级版,企业级桌面端组件库:- 全面适配 Vue 3 和 TypeScript,组件 API 更规范。
- 支持按需引入,减少打包体积。
- 包含表单、表格、弹窗等常用组件,适合后台管理系统。
-
Naive UI
现代化 Vue 3 组件库,特点是:- 原生支持 TypeScript,类型定义完善。
- 组件设计美观,支持主题定制和暗黑模式。
- 按需引入无冗余代码,性能优秀。
-
Vant 4
有赞团队开发的移动端组件库,适配 Vue 3:- 轻量高效,组件体积小,适合 H5 和移动端应用。
- 支持按需引入和 Tree-Shaking,优化加载速度。
-
Vuetify 3
基于 Material Design 3 的 Vue 3 组件库,提供丰富的预定义组件和布局,适合快速开发符合 Material 风格的应用。
五、服务端渲染(SSR)与静态站点生成
-
Nuxt 3
基于 Vue 3 和 Vite 的 SSR 框架,核心特性:- 支持服务端渲染(SSR)、静态站点生成(SSG)、增量静态再生(ISR)。
- 内置路由系统、状态管理(基于 Pinia)、API 接口等,简化全栈开发。
- 采用组合式 API,支持 TypeScript,性能比 Nuxt 2 提升显著。
-
Gridsome(Vue 3 兼容版)
静态站点生成器,基于 Vue 3 和 GraphQL,适合构建博客、文档等静态网站,预渲染页面提升 SEO 和加载速度。
六、工具库与扩展
-
VueUse
基于 Vue 3 组合式 API 的实用工具集,包含:- 状态管理(
useLocalStorage、useSessionStorage)。 - 浏览器 API(
useClipboard、useDark)。 - 事件处理(
useEventListener)、网络请求(useFetch)等。
简化重复逻辑,提升开发效率。
- 状态管理(
-
Vue I18n v9+
Vue 官方国际化插件,适配 Vue 3:- 支持组合式 API(
useI18n)。 - 优化多语言切换、日期/数字格式化,支持 TypeScript。
- 支持组合式 API(
-
Vue Test Utils v2
Vue 3 官方测试工具库,用于组件单元测试:- 支持组合式 API 组件测试。
- 模拟用户交互、断言组件渲染结果,可与 Jest、Vitest 等框架集成。
总结
Vue 3 的核心生态以 Vue 3 核心库 为基础,配合 Vue Router 4(路由)、Pinia(状态管理)、Vite(构建工具)构成开发基石,再结合 Element Plus(UI)、Nuxt 3(SSR)、VueUse(工具集)等,形成了覆盖从基础开发到工程化、跨端、测试的完整技术栈,满足各类 Vue 3 项目需求。