白狗子的博客

「天上浮云如白衣,斯须改变如苍狗。」——杜甫

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 时说明维护成本与替代方案。

© 2025 My Blog. Built with Nuxt.js v4