Vue 组件之间有哪些通信方式?分别适用什么场景?
父子: props 向下 / emits 向上 (最常用,清晰)
v-model (语法糖,双向)
ref + defineExpose(父拿子实例)
兄弟: 共享状态(Pinia / 简单 reactive 单例)/ 事件总线(mitt)
跨层: provide / inject
全局: Pinia / Vuex
模板: slot(默认/具名/作用域插槽)选型原则:
- 简单的父子 → props/emits
- 中型应用共享状态 → Pinia(比 Vuex 轻、API 简单)
- 跨多层级且局部 → provide/inject
- 一次性结构复用 → slot
避免滥用事件总线(易失控、难追踪);大型项目统一用 Pinia。