Vue 的上手成本低是公认的,但「上手快」和「用得好」之间隔着不少东西:响应式的边界在哪、什么时候该用 provide/inject 而不是层层传 props、Vuex 到底什么规模才值得引入、组件样式为什么加了 scoped 还是会漏。

这个专题按一个真实项目会依次遇到的顺序组织——从写第一个组件,到组织多页面应用,到最后的工程配置。

学习路径

第一步:模板语法与指令。 v-ifv-show 的取舍、v-for 与 key、v-model 的双向绑定本质上是语法糖。这一层是 Vue 最直观的部分。

第二步:组件与生命周期。 八个钩子分别在什么时机触发、各自适合做什么。特别要理解「创建前/后」和「挂载前/后」的区别——很多「取不到 DOM」的问题都出在把 DOM 操作写进了 created

第三步:组件通信。 props 向下、事件向上是主干;$root/$parent/$refs 是逃生通道,能不用就不用;provide/inject 适合跨多层的配置型数据,但它不是响应式的银弹。

第四步:状态管理与路由。 Vuex 的五个核心概念、mutation 为什么必须同步;Vue Router 的导航守卫执行顺序、路由懒加载。

第五步:工程化与进阶。 Vue CLI 的环境变量与配置扩展、Scoped CSS 的实现原理与穿透写法、diff 算法。

第六步:Vue 3。 Composition API 解决的是「组件变大后逻辑被 data/methods/computed 切碎」的问题,让关联代码物理上聚在一起,还能抽成 composable 复用。

Options API 与 Composition API 怎么选

维度 Options API Composition API
小组件 更简洁直观 略显啰嗦
大组件 逻辑被选项切碎 关联逻辑可聚合
逻辑复用 mixin,有命名冲突风险 composable,显式导入导出
TypeScript 类型推导较弱 类型推导完整
上手成本 需要理解 ref/reactive 的差异

结论:小组件两者都行,按团队习惯;组件超过两三百行、或者需要跨组件复用状态逻辑、或者用 TypeScript,选 Composition API。

常见误区

以为 scoped 能完全隔离样式。 scoped 通过给元素加属性选择器实现,作用范围是「当前组件模板里写出来的元素」。子组件根元素、v-html 动态插入的内容、通过 JS 追加到 body 的弹窗,都不在覆盖范围内。跨组件改样式要用深度选择器。

$parent$children 做组件通信。 这会把组件和它的使用位置绑死,父组件结构一变就崩。它们是处理边界情况的逃生通道,不是通信手段。

小项目也上 Vuex。 几个组件之间传数据,props 加事件完全够用。Vuex 的价值在于「多个互不相邻的组件共享同一份会变的状态」,没到这个程度引入它,只是多写样板代码。

在 mutation 里写异步。 mutation 必须同步,否则 devtools 的状态追踪会错乱——它记录的是 mutation 提交那一刻的状态快照。异步逻辑放 action,action 里再提交 mutation。

v-ifv-for 写在同一个元素上。 Vue 2 里 v-for 优先级更高,会先循环再逐个判断,白跑一遍;Vue 3 里 v-if 优先级更高,会拿不到 v-for 的循环变量直接报错。正确做法是把 v-if 提到外层,或者先用 computed 过滤数据。

本专题全部文章

  1. Vue3 Composition API 用了大半年,说说我的实际感受Vue3 Composition API 实战:相比 Options API 把 data/methods/computed 拆散,组合式 API 让关联逻辑聚在一起,还能抽成 composable 复用。
  2. vue diff 算法Vue diff 算法详解:虚拟 DOM 比对的整体流程、双端比较策略的四种命中情形、key 在列表更新中起什么作用,以及它与 React diff 在思路上的差异。
  3. 组件的写法一个规范的 Vue 单文件组件长什么样:template、script、style 三部分的组织方式,选项的书写顺序、命名约定与注释规范,可作为团队组件模板直接套用。
  4. Vue Router 使用指南:编程式导航、导航守卫与路由跳转Vue Router 使用说明:编程式导航的各种跳转方式、动态路由与参数传递、嵌套路由、导航守卫的执行顺序,以及路由懒加载的写法。
  5. Vue-cli 的使用Vue CLI 使用说明:运行模式与环境变量的加载规则、vue.config.js 常用配置项、代理与打包分析,以及怎么在不 eject 的前提下改 webpack 配置。
  6. Vuex 使用说明:五个核心概念与模块化命名空间Vuex 使用说明:state、getters、mutations、actions、modules 五个核心概念的职责划分与写法,以及为什么 mutation 必须同步、什么规模的项目才值得引入。
  7. Vue 知识体系梳理:从 MVVM 到组件、指令与生命周期Vue 知识体系梳理:以思维导图形式串起模板语法、响应式原理、组件化、生命周期、路由、状态管理等模块,适合体系化复习或面试前快速过一遍全貌。
  8. Vue 组件边界处理:$root、$parent 与 provide/injectVue 组件边界情况处理:$root 访问根实例、$parent 与 $children 的访问方式及其风险、$refs 引用子组件,以及 provide/inject 依赖注入的适用场景与局限。
  9. Vue 作用域 cssVue Scoped CSS 详解:vue-loader 如何通过属性选择器实现样式隔离、深度选择器怎么穿透到子组件、以及 scoped 对动态生成内容失效的原因与规避办法。
  10. Vue 指令完全指南:参数、修饰符、缩写与内置指令清单Vue 指令完整说明:v-if 与 v-show 的取舍、v-for 与 key、v-bind 与 v-model 的双向绑定原理、v-on 事件修饰符,以及自定义指令的编写方式。
  11. Vue 生命周期钩子:八个阶段的触发时机与适用场景Vue 生命周期详解:beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy、destroyed 八个钩子各自的执行时机与适合做的事情。
  12. Vue 入门:Prop 传值、类型验证与非 Prop 特性透传Vue 入门教程:从 Prop 开始讲组件通信的基本模型,包括 prop 类型校验、单向数据流约束、非 prop 特性的透传行为,适合刚上手 Vue 组件化的开发者。
  13. Vue 常用语法速查:组件通信、模板语法与常见写法Vue 常用语法速查:子组件调用父组件方法的几种方式、事件与属性传递、插槽用法、动态组件与异步组件,覆盖日常开发最高频的语法点。
  14. Vue 常见报错排查:根元素、重复导航与 scoped 样式失效Vue 开发常见问题排查:组件模板只能有一个根元素、数据更新视图不刷新、组件通信踩坑等实际开发中高频遇到的问题,每条给出成因与解决办法。