Vue3核心知识体系的各个方位总结

 更新时间:2026年08月12日 09:24:24   作者:小江的记录本  
Vue3是当前主流前端框架,相比Vue2性能更优,支持组合式API和TypeScript,响应式系统基于 Proxy,模板不再强制单根节点,这篇文章主要介绍了Vue3核心知识体系的各个方位总结,需要的朋友可以参考下

Vue3 以性能提升、Composition API、更好的 TypeScript 支持为核心,构建了更灵活、可维护的前端框架体系。以下是全方位结构化总结:

一、核心设计理念与升级亮点

1. 设计目标

  • 性能优先:通过 Proxy 响应式、虚拟 DOM 优化实现更快的渲染速度。
  • 可维护性:Composition API 解决大型项目逻辑复用难题。
  • 渐进式框架:保留 Vue2 灵活性,同时支持更规范的工程化开发。

2. 与 Vue2 的核心区别

维度Vue2Vue3
响应式原理Object.definePropertyProxy(性能更好、支持数组/对象深层监听)
API 风格Options API(选项式)Composition API(组合式,推荐)
组件根节点仅支持单根节点支持多根节点(Fragment)
TypeScript支持有限原生深度支持
新特性无Teleport、Suspense、Pinia

二、响应式系统(核心基石)

1. 响应式原理:Proxy vs Object.defineProperty

  • Vue2:通过 Object.defineProperty 劫持对象属性,需递归遍历、无法监听数组索引变化。
  • Vue3:使用 Proxy 代理整个对象,支持:
    • 监听数组索引和长度变化;
    • 监听对象属性的新增/删除;
    • 懒监听(仅在访问时递归代理子对象)。

2. 核心响应式 API

API作用适用场景
ref定义基本类型/对象的响应式数据基本类型(数字、字符串)、需 .value 访问
reactive定义对象/数组的响应式数据复杂对象(无需 .value)
computed计算属性(缓存结果)依赖其他响应式数据的派生值
watch监听特定数据变化(可获取旧值)需要明确知道变化前后的值
watchEffect自动追踪依赖并执行(无旧值)只需响应数据变化执行副作用

3. 响应式进阶

  • toRef / toRefs:将 reactive 对象的属性转为 ref,避免解构丢失响应性。
  • shallowRef / shallowReactive:浅层响应式(仅监听第一层属性),优化大型数据性能。
  • readonly:创建只读响应式对象,防止意外修改。

三、Composition API(逻辑复用的革命)

1. 核心入口:setup函数

  • 执行时机:在组件创建之前(beforeCreate 之前),无 this。
  • 返回值:可直接在模板中使用的响应式数据/方法。
  • <script setup> 语法糖:简化 setup 写法,自动导入、无需 return。

2. 逻辑组织与复用:自定义 Hooks

  • 定义:将相关逻辑封装为函数(命名以 use 开头,如 useCounter、useFetch)。
  • 优势:替代 Vue2 的 mixin,解决命名冲突、来源不清晰问题。

3. 与 Options API 的对比

特点Options APIComposition API
逻辑组织按选项(data、methods)拆分按功能模块拆分
逻辑复用mixin(易冲突)自定义 Hooks(清晰灵活)
TypeScript类型推导困难完美支持类型推导
适用场景小型项目中大型项目、复杂逻辑复用

四、组件系统(增强与新特性)

1. 组件定义

  • defineComponent:提供 TypeScript 类型支持的组件定义方式。
  • <script setup> 中直接导入组件即可使用,无需注册。

2. Props & Emits 增强

  • Props:支持 TypeScript 类型定义(如 defineProps<{ msg: string }>())。
  • Emits:通过 defineEmits 定义事件,支持类型校验(如 defineEmits<{ (e: 'update', value: number): void }>())。

3. 插槽(Slot)新语法

  • 统一使用 v-slot(替代 slot 和 slot-scope),支持缩写 #。
  • 作用域插槽:通过 <template #default="{ data }"> 接收子组件数据。

4. 内置新组件

组件作用典型场景
Teleport将组件内容渲染到指定 DOM 节点弹窗、抽屉(避免父组件样式干扰)
Suspense处理异步组件加载状态配合 async setup 显示加载中/错误状态

5. 动态与异步组件

  • 动态组件:<component :is="currentComponent">,结合 keep-alive 缓存状态。
  • 异步组件:defineAsyncComponent(() => import('./MyComponent.vue')),支持加载失败/超时处理。

五、生命周期钩子

1. Vue3 生命周期(与 Vue2 对应)

Vue2 生命周期Vue3 生命周期(Composition API)执行时机
beforeCreatesetup(替代)组件实例创建前
createdsetup(替代)组件实例创建后
beforeMountonBeforeMountDOM 挂载前
mountedonMountedDOM 挂载后
beforeUpdateonBeforeUpdate数据更新、DOM 重新渲染前
updatedonUpdated数据更新、DOM 重新渲染后
beforeDestroyonBeforeUnmount组件卸载前
destroyedonUnmounted组件卸载后

2. 新增调试钩子

  • onRenderTracked:追踪响应式依赖被访问时触发。
  • onRenderTriggered:追踪响应式依赖变化触发重新渲染时触发。

六、模板语法与指令

1. 核心变化

  • v-model 升级:
    • 支持多个 v-model(如 <Child v-model:title="title" v-model:content="content" />)。
    • 自定义修饰符(如 v-model.capitalize="text")。
  • v-if 与 v-for 优先级:Vue3 中 v-if 优先级高于 v-for(Vue2 相反)。
  • 多根节点支持:模板可直接写多个根元素(无需外层包裹 div)。

2. 常用指令

指令作用示例
v-bind动态绑定属性(缩写 :)<img :src="imgUrl" />
v-on绑定事件(缩写 @)<button @click="handleClick" />
v-show切换 CSS display 控制显示<div v-show="isVisible" />
v-for列表渲染<li v-for="item in list" :key="item.id" />

七、路由管理(Vue Router 4)

1. 核心变化

  • 创建路由实例:createRouter(替代 new Router)。
  • 历史模式:createWebHistory(HTML5 模式)、createWebHashHistory(Hash 模式)。

2. Composition API 中使用路由

  • useRouter:获取路由实例(用于编程式导航,如 router.push('/home'))。
  • useRoute:获取当前路由信息(如 route.query、route.params)。

3. 路由守卫

  • 全局守卫:router.beforeEach、router.afterEach。
  • 组件内守卫:onBeforeRouteEnter、onBeforeRouteUpdate、onBeforeRouteLeave(在 setup 中使用)。

八、状态管理(Pinia)

1. 核心概念(替代 Vuex)

  • Store:状态管理的核心单元,通过 defineStore 定义。
  • State:响应式状态(直接修改,无需 mutations)。
  • Getters:计算属性(缓存派生状态)。
  • Actions:同步/异步方法(替代 mutations + actions)。

2. 基本使用

// 定义 Store
const useCounterStore = defineStore('counter', {
  state: () => ({ count: 0 }),
  getters: { doubleCount: (state) => state.count * 2 },
  actions: { increment() { this.count++ } }
})

// 组件中使用
const store = useCounterStore()
store.increment()

3. 优势

  • 更简洁的 API(无 mutations、modules 嵌套)。
  • 完美支持 TypeScript。
  • 与 Vue DevTools 深度集成。

九、性能优化

1. 框架层面优化

  • 虚拟 DOM 重写:
    • 静态提升(将不变的节点提升到渲染函数外)。
    • PatchFlags(标记动态节点,减少对比范围)。
  • Tree Shaking:按需引入模块(如仅使用 ref 时不打包 reactive)。
  • 响应式优化:Proxy 比 Object.defineProperty 性能提升 1.2~2 倍。

2. 开发层面优化技巧

  • 使用 v-once:渲染一次后不再更新(适用于静态内容)。
  • 使用 v-memo:缓存组件/元素的渲染结果(条件性更新)。
  • 异步组件与路由懒加载:defineAsyncComponent、() => import('./Component.vue')。
  • 避免不必要的响应式:使用 shallowRef/shallowReactive 处理大型数据。
  • 合理使用 keep-alive:缓存组件状态,避免重复渲染。

十、TypeScript 支持

1. 核心类型定义

  • Props 类型:defineProps<{ msg: string; count?: number }>()。
  • Emits 类型:defineEmits<{ (e: 'update', value: number): void }>()。
  • Ref 类型:const count = ref<number>(0)。
  • Reactive 类型:const user = reactive<{ name: string; age: number }>({ name: 'Tom', age: 18 })。

2.<script setup>中的 TS 最佳实践

  • 使用 defineProps/defineEmits 的泛型语法。
  • 为 ref/reactive 显式指定类型(或让 TS 自动推导)。
  • 使用 Interface 定义复杂数据结构。

十一、生态与工具

1. 构建工具:Vite

  • 与 Vue3 深度集成,提供极快的开发体验(冷启动、热更新)。
  • 原生支持 ES Modules,无需打包即可运行开发环境。

2. 常用库

  • VueUse:提供大量实用的 Composition API Hooks(如 useLocalStorage、useMouse)。
  • Element Plus:Vue3 版本的 Element UI 组件库。
  • Ant Design Vue:企业级 UI 组件库(Vue3 版)。

3. 调试工具

  • Vue DevTools:支持 Vue3 的组件树、状态追踪、性能分析。

十二、最佳实践

  1. 优先使用 Composition API + <script setup>:提升代码可维护性和 TypeScript 支持。
  2. 逻辑复用用自定义 Hooks:替代 mixin,避免命名冲突。
  3. 状态管理用 Pinia:替代 Vuex,简化状态管理流程。
  4. 性能优化从细节入手:合理使用 v-memo、异步组件、Tree Shaking。
  5. TypeScript 类型安全:为 Props、Emits、响应式数据添加类型定义。

总结 

到此这篇关于Vue3核心知识体系的各个方位总结的文章就介绍到这了,更多相关Vue3核心知识体系内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案

    vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案

    这篇文章主要介绍了vue本地构建热更新卡顿的问题“75 advanced module optimization”解决方案,每次热更新都会卡在 "75 advanced module optimization" 的地方不动了,如何解决这个问题呢,下面小编给大家带来了解决方案,需要的朋友可以参考下
    2022-08-08
  • vue3+element-plus暗黑模式切换动画圆弧过渡效果

    vue3+element-plus暗黑模式切换动画圆弧过渡效果

    文章介绍了如何在Vue 3和Element Plus中实现暗黑模式的切换,并通过动画和圆弧过渡效果提升用户体验,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-01-01
  • vue实现文件上传和下载

    vue实现文件上传和下载

    这篇文章主要为大家详细介绍了vue实现文件上传和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 解决vue axios跨域 Request Method: OPTIONS问题(预检请求)

    解决vue axios跨域 Request Method: OPTIONS问题(预检请求)

    这篇文章主要介绍了解决vue axios跨域 Request Method: OPTIONS问题(预检请求),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 通过debug搞清楚.vue文件如何变成.js文件(案例详解)

    通过debug搞清楚.vue文件如何变成.js文件(案例详解)

    这篇文章主要介绍了通过debug搞清楚.vue文件如何变成.js文件,本文以@vitejs/plugin-vue举例,通过debug的方式带你一步一步的搞清楚vue文件是如何编译为js文件的,需要的朋友可以参考下
    2024-07-07
  • vue学习记录之动态组件浅析

    vue学习记录之动态组件浅析

    动态组件指的是动态切换组件的显示与隐藏,这篇文章主要给大家介绍了关于vue学习记录之动态组件的相关资料,本文通过示例代码介绍介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • Vue 后台管理类项目兼容IE9+的方法示例

    Vue 后台管理类项目兼容IE9+的方法示例

    这篇文章主要介绍了Vue 后台管理类项目兼容IE9+的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-02-02
  • vue2项目使用exceljs多表头导出功能详解

    vue2项目使用exceljs多表头导出功能详解

    ExcelJS是一个用于在Node.js和浏览器中创建、读取和修改Excel文件的强大JavaScript库,下面这篇文章主要给大家介绍了关于vue2项目使用exceljs多表头导出功能的相关资料,需要的朋友可以参考下
    2024-05-05
  • 在vue里面设置全局变量或数据的方法

    在vue里面设置全局变量或数据的方法

    下面小编就为大家分享一篇在vue里面设置全局变量或数据的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • 详解vue静态资源打包中的坑与解决方案

    详解vue静态资源打包中的坑与解决方案

    本篇文章主要介绍了详解vue静态资源打包中的坑与解决方案,本文主要解决路径问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02

最新评论