Vue3介绍

Vue3 是 Vue.js 框架的第三个主要版本,于 2020 年正式发布,相比 Vue2 进行了全面重构,在性能、可维护性、扩展性等方面有显著提升。它保留了 Vue 一贯的“渐进式框架”理念,同时引入了诸多现代前端技术特性,以下从核心特性、架构变化、常用 API 等方面详细介绍:

一、核心特性与优势

  1. 性能大幅提升

    • 响应式系统重构:从 Vue2 的 Object.defineProperty 改为基于 Proxy 的响应式系统,支持监听数组索引、对象新增属性等 Vue2 中难以处理的场景,且避免了递归遍历对象的性能损耗。
    • 编译时优化:通过“静态标记”区分模板中的静态节点(如纯文本、无绑定的标签)和动态节点,减少虚拟 DOM Diff 时的对比开销;支持“按需更新”,仅重新渲染受影响的节点。
    • 更小的体积:移除了 Vue2 中不常用的 API(如 filter),通过 Tree-Shaking 支持按需引入,核心库体积比 Vue2 减少约 40%。
  2. 更好的 TypeScript 支持

    • Vue3 源码采用 TypeScript 编写,原生支持类型定义,解决了 Vue2 中使用 TypeScript 时类型推断不足的问题。
    • 组件、Props、生命周期等 API 均提供完整的类型提示,开发工具(如 VS Code + Volar)可实现更精准的代码补全和错误检查。
  3. Composition API(组合式 API)

    • 替代 Vue2 中 Options API(选项式 API)的核心创新,允许按逻辑功能组织代码,而非按 datamethodscomputed 等选项拆分。
    • 解决了 Vue2 中大型组件代码分散、复用困难的问题,通过 setup 函数或 <script setup> 语法实现更灵活的逻辑组合。

二、核心 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('组件卸载完成'));
    }
    
  • 依赖注入provideinject 替代 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-ifv-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>
    
  • 支持通过 definePropsdefineEmits 声明组件的 Props 和事件,类型提示更友好。

三、架构与生态变化

  1. 模块化设计
    Vue3 采用模块化架构,将核心功能拆分为独立包(如 @vue/reactivity 负责响应式、@vue/compiler-core 负责编译),允许开发者按需引入,甚至在非 Vue 项目中复用部分功能(如用 @vue/reactivity 实现响应式)。

  2. 自定义渲染器(Custom Renderer)
    Vue3 支持通过自定义渲染器将模板渲染到不同目标(如 Canvas、WebGL 或原生应用),例如 vue3-canvas-renderer 可将 Vue 组件渲染到 Canvas 上,拓展了 Vue 的应用场景。

  3. 生态工具升级

    • Vue Router 4:适配 Vue3,支持 Composition API,路由参数可通过 useRoute 访问。
    • Pinia:替代 Vuex 成为官方推荐的状态管理库,简化 API,原生支持 TypeScript,无需嵌套 modules
    • Vite:Vue 作者开发的构建工具,基于 ES 模块原生支持实现快速热更新,成为 Vue3 项目的首选构建工具。

四、与 Vue2 的主要区别

特性 Vue2 Vue3
响应式系统 Object.defineProperty Proxy
核心 API Options API 为主 Composition API 为主
模板根节点 必须单一根节点 支持多根节点(Fragment)
TypeScript 支持 需额外配置,类型提示有限 原生支持,类型系统完善
状态管理 Vuex Pinia(官方推荐)
构建工具 Webpack 为主 Vite 为主(更快的热更新)
生命周期命名 beforeCreatemounted onBeforeMountonMounted 等(需导入)

五、适用场景

  • 大型应用:Composition API 有助于组织复杂逻辑,TypeScript 支持提升可维护性。
  • 性能敏感场景:编译时优化和响应式重构使 Vue3 更适合高性能需求(如数据可视化、复杂表单)。
  • 跨平台开发:结合 uni-appVue Native,可用于移动端混合开发。

Vue3 是对 Vue 框架的一次全面升级,既保留了 Vue 易学易用的特点,又解决了 Vue2 在大型项目中的痛点,目前已成为新项目的首选版本。对于 Vue2 开发者,可通过逐步迁移(如先使用 composition-api 插件过渡)适应 Vue3 的新特性。

Vue3开发框架

Vue 3 生态中,核心框架和工具围绕其新特性(如组合式 API、TypeScript 支持、性能优化等)构建,形成了完整的技术栈。以下是 Vue 3 的核心框架及工具:

一、核心基础框架

  1. Vue 3 核心库
    Vue 3 本身是整个生态的基础,相比 Vue 2 有重大升级:

    • 基于 Proxy 实现响应式系统,解决 Vue 2 响应式的局限性(如监听新增属性、数组索引变化等)。
    • 引入 组合式 API(Composition API),通过 setuprefreactivewatch 等函数更灵活地组织组件逻辑,替代传统 Options API。
    • 支持 TypeScript 原生集成,提供更完善的类型校验。
    • 编译阶段优化(如静态提升、PatchFlag),大幅提升渲染性能。
  2. Vue Router 4
    Vue 3 官方路由库,与 Vue 3 深度适配:

    • 支持组合式 API,可通过 useRouteruseRoute 在组件中获取路由实例。
    • 路由配置支持 TypeScript 类型提示。
    • 优化导航守卫、路由匹配逻辑,支持更灵活的路由懒加载。

二、状态管理框架

  1. Pinia
    Vue 官方推荐的状态管理库(Vuex 的继任者),专为 Vue 3 设计:

    • 移除 Vuex 中的 Mutation,直接在 Action 中修改状态(支持同步和异步操作)。
    • 原生支持 TypeScript,无需额外类型声明。
    • 与组合式 API 无缝集成,可通过 useStore 轻松在组件中访问状态。
    • 模块化设计更简洁,每个 store 都是独立模块,无需嵌套。
  2. Vuex 4(过渡方案)
    Vuex 的 Vue 3 适配版本,保留 Vuex 核心概念(State、Getter、Mutation、Action、Module),但官方更推荐使用 Pinia。

三、构建与工程化工具

  1. Vite
    由 Vue 作者尤雨溪开发的新一代构建工具,是 Vue 3 项目的首选:

    • 基于浏览器原生 ES 模块(ESM),启动速度比 Webpack 快 10-100 倍,支持毫秒级热更新(HMR)。
    • 零配置支持 Vue 3 单文件组件(SFC)、TypeScript、CSS 预处理器等。
    • 构建产物体积更小,性能更优。
  2. Vue CLI 5(兼容方案)
    Vue 官方脚手架的最新版本,支持 Vue 3,但逐渐被 Vite 替代。适用于需要 Webpack 生态的项目。

四、UI 组件库(Vue 3 专属)

  1. Element Plus
    Element UI 的 Vue 3 升级版,企业级桌面端组件库:

    • 全面适配 Vue 3 和 TypeScript,组件 API 更规范。
    • 支持按需引入,减少打包体积。
    • 包含表单、表格、弹窗等常用组件,适合后台管理系统。
  2. Naive UI
    现代化 Vue 3 组件库,特点是:

    • 原生支持 TypeScript,类型定义完善。
    • 组件设计美观,支持主题定制和暗黑模式。
    • 按需引入无冗余代码,性能优秀。
  3. Vant 4
    有赞团队开发的移动端组件库,适配 Vue 3:

    • 轻量高效,组件体积小,适合 H5 和移动端应用。
    • 支持按需引入和 Tree-Shaking,优化加载速度。
  4. Vuetify 3
    基于 Material Design 3 的 Vue 3 组件库,提供丰富的预定义组件和布局,适合快速开发符合 Material 风格的应用。

五、服务端渲染(SSR)与静态站点生成

  1. Nuxt 3
    基于 Vue 3 和 Vite 的 SSR 框架,核心特性:

    • 支持服务端渲染(SSR)、静态站点生成(SSG)、增量静态再生(ISR)。
    • 内置路由系统、状态管理(基于 Pinia)、API 接口等,简化全栈开发。
    • 采用组合式 API,支持 TypeScript,性能比 Nuxt 2 提升显著。
  2. Gridsome(Vue 3 兼容版)
    静态站点生成器,基于 Vue 3 和 GraphQL,适合构建博客、文档等静态网站,预渲染页面提升 SEO 和加载速度。

六、工具库与扩展

  1. VueUse
    基于 Vue 3 组合式 API 的实用工具集,包含:

    • 状态管理(useLocalStorageuseSessionStorage)。
    • 浏览器 API(useClipboarduseDark)。
    • 事件处理(useEventListener)、网络请求(useFetch)等。
      简化重复逻辑,提升开发效率。
  2. Vue I18n v9+
    Vue 官方国际化插件,适配 Vue 3:

    • 支持组合式 API(useI18n)。
    • 优化多语言切换、日期/数字格式化,支持 TypeScript。
  3. 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 项目需求。