Vue 通信方式对比

Vue 中 props、emit、slot、v-model、provide/inject 与 Pinia 在通信语义上的对比总览。

#tech / dev / frame #resource / vue3 #type / synthesis #status / growing

[!info] related notes

Vue 通信方式对比

Vue 通信方式最容易混乱的地方,在于不同 API 解决的是不同层级的问题,却经常被放在一起随便替代。

一句话定义

props/emit 解决父子数据流,slot 解决内容组合,v-model 解决输入值同步语法糖,provide/inject 解决跨层上下文,Pinia 解决业务级共享状态。

一张实用心智图

props / emit

  • 父子直接通信
  • 最基础、最清晰

slot

  • 父组件决定内容结构
  • 更偏组合能力

v-model

  • 基于 props + emit 的约定语法糖
  • 更适合输入值同步场景

provide / inject

  • 祖先到后代跨层上下文共享
  • 不适合滥用成隐式全局状态

Pinia

  • 多组件、多页面共享业务状态
  • 更适合集中管理和追踪

最容易混淆的点

  • v-model 不是另一套数据流,它还是站在 props/emit
  • provide/inject 不等于状态管理
  • slot 解决的是内容结构,不是单纯传值

最短记忆方式

先分“传值、传结构、跨层、共享状态”,再选 Vue 通信方式。

面试要点

来自 vue-communication-comparison-interview-question 的面试视角整理。

一句话回答

props/emit 处理父子数据流,slot 处理内容结构,v-model 是值同步语法糖,provide/inject 处理跨层上下文,Pinia 处理业务级共享状态,它们不在同一层竞争。

最稳的回答主线

  • 父子传值:props/emit
  • 内容组合:slot
  • 输入同步:v-model
  • 跨层上下文:provide/inject
  • 业务共享状态:Pinia

最短记忆方式

Vue 通信方式不是谁替代谁,而是谁负责哪一层。

创建于 2026/3/19 更新于 2026/5/27