父组件向子组件通过 props 传递数据,子组件向父组件通过自定义事件(defineEmits)通知变化,这是最基础、最推荐的通信方式,遵循单向数据流原则。v-model 也可用于父子组件间的双向绑定,本质是 props 加事件的语法糖。
对于嵌套较深的组件,逐层传递 props 会繁琐。Vue 提供 provide/inject 机制,祖先组件通过 provide 提供数据,后代组件通过 inject 注入,无需经过中间层级。它适合主题、语言等相对稳定的共享数据,但需注意数据来源的可追踪性。
对于多个组件共享的复杂状态,推荐使用 Pinia 状态管理库。Pinia 提供集中式的 store,任意组件都可读写共享状态,并支持模块化组织和 TypeScript,是大型应用中管理全局状态的官方推荐方案。
在特定场景下,还可通过事件总线、自定义事件或第三方库实现通信,但在 Vue 3 中官方更推荐使用 props/emit、provide/inject 和 Pinia 等规范方式,以保证数据流清晰可维护。