Skip to content

Vue 3 附录:进阶知识体系提要

从扩展问答类长文中抽取结构与主干要点;细节与手写题仍以正文 0106 各章为准。


说明(阅读建议)


一、Vue 3 相比 Vue 2:五条主线

  1. 源码 / 工程:TS 重写、Monorepo 分包,维护性与扩展性更好。
  2. 性能 / 体积:Tree-shaking、编译期 PatchFlag / 静态提升、diff 优化,线上常用路径更小更快。
  3. API 形态:Composition API + <script setup>,大型组件逻辑组织更清晰。
  4. 响应式Proxy 取代 Object.defineProperty,补齐全面的对象/集合监听能力。
  5. 破坏性变更filter$on/$off/$once.sync 等退场或替换(参见 01-入门)。

二、响应式简要表述模板

  • 实现Proxy + Reflect + effecttrack / trigger
  • 为何 Proxy:原生支持增删属性、数组索引、Map/Set;懒代理优化初始化。
  • ref vs reactive:原始值 vs 对象聚合;解构用 toRefs;整体替换多用 ref

三、Composition API 优缺点

  • 优点:逻辑聚合、Composable 复用、TS 友好。
  • 缺点:上手曲线略陡;过度拆分 hooks 可读性反降。

<script setup>少样板、编译期优化、类型推导自然;配套 defineProps / defineEmits / defineExpose


四、生命周期(组合式)

常用:onMounted / onUpdated / onBeforeUnmount / onUnmounted,缓存组件配合 onActivated / onDeactivated,错误 onErrorCaptured
与 Vue 2 对照见 03


五、组件通信全景

  • 父子:props + emitdefineProps / defineEmits)。
  • 跨层:provide/inject(传 ref/reactive 保持响应式)。
  • 全局状态:Pinia(替代 Vuex 为主流)。
  • 兄弟:优先状态抬升 / Pinia;避免依赖已移除的内置事件总线。
  • ref + defineExpose:命令式调用子能力。

六、内置组件速记

TeleportSuspenseKeepAlivetransition 系列 —— 详见 04 与 Vue 2 文档中动画/keep-alive 章节。


七、Vue Router 4(提要)

createRouter + createWebHistory / createWebHashHistory;组合式 useRouter / useRoute;动态 addRoute;路由懒加载 import()

守卫顺序(官方 Full Navigation Resolution Flow 摘要):beforeRouteLeave(将失活的组件)→ 全局 beforeEachbeforeRouteUpdate(复用的组件)→ 路由 beforeEnter解析异步组件beforeRouteEnter(将激活的组件)→ 全局 beforeResolve → 确认导航 → 全局 afterEach → DOM 更新 →(选项式下)beforeRouteEnter 里传给 next 的回调。细节以 Navigation Guards 为准。


八、Pinia(提要)

相对 Vuex:无 mutation 分层负担、模块即 store、TS 友好、体积小。
持久化常用 pinia-plugin-persistedstate


九、diff / 虚拟 DOM / nextTick(提要)

  • PatchFlag + 静态提升 → 缩小比对面。
  • 列表 LIS → 少移动 DOM。
  • nextTick:等待队列刷新后再读 DOM(实现原理:微任务优先)。

十、性能优化分层(提要)

  • 编译:交给 Vue 3 编译器。
  • 代码:shallow、computed、懒加载、列表 key、虚拟滚动、v-memo
  • 打包:分包、压缩、按需引入组件库、CDN / HTTP2 等。

关于附录长文

知识体系导图(Vue 3).md 曾含「逐题标准答案」、手写 reactive/computed/nextTick 参考实现及 Vite vs Webpack 对比稿,适合系统复习时对照精读。主体内容已拆分到:

  • 原理 → 02 / 05
  • 写法 → 03 / 04
  • 工程 → 06 / 07(本附录)

若需恢复旧版长文,可在版本历史中检索或向仓库维护者索取存档。