Vue-面试-组件通信方式
2026年10月16日·Admin·1 次浏览
面试题:Vue 组件有哪些通信方式?适用场景?
速查表
| 方式 | 方向 | 典型场景 |
|---|---|---|
| props / emit | 父 ↔ 子 | 最基础、首选 |
| v-model / 多个 v-model | 父 ↔ 子 | 表单类、弹窗显隐 |
| provide / inject | 祖先 → 后代 | 主题、配置、避免逐层 props |
attrs / listeners(Vue2) |
父 → 子/孙 | 透传属性与事件(高阶组件) |
useAttrs(Vue3) |
透传未声明 props | 封装 UI 组件库 |
EventBus(mitt 等) |
任意 | 不推荐大规模用,难追踪 |
| Pinia / Vuex | 全局 | 跨多层级、共享业务状态 |
ref 暴露子实例 |
父调子方法 | 少用,破坏封装时用 |
原理要点
- props 单向向下:子不应直接改 props,应
emit让父改(或本地 data 拷贝后编辑)。 - provide/inject 默认非响应式(若 provide 普通值);要响应式可 provide
ref/computed或整个 store。 - 全局事件总线:Vue3 已移除实例
$on/$off,需第三方库;大型项目优先 store 或 依赖注入。
口述顺序建议
先答 props/emit,再 v-model,再 provide/inject,最后 Pinia;提到 EventBus 时说明维护成本与替代方案。