组件化开发中,组件之间的数据传递是最常见的需求。本文梳理 6 种通信方式及其适用场景。

一、props / $emit(父子通信)

  • 1.1 父组件通过 props 向子组件传值
  • 1.2 子组件通过 $emit 触发父组件事件
  • 1.3 .sync 修饰符的语法糖

二、$refs / $parent / $children

  • 2.1 $refs 获取子组件实例
  • 2.2 $parent 访问父组件
  • 2.3 局限性——耦合度高

三、EventBus(兄弟组件通信)

  • 3.1 创建一个空的 Vue 实例作为事件中心
  • 3.2 $on 监听事件、$emit 触发事件
  • 3.3 $off 销毁监听——防止内存泄漏

四、Vuex(全局状态管理)

  • 4.1 什么时候需要 Vuex
  • 4.2 State / Getter / Mutation / Action
  • 4.3 单向数据流的理解

五、$attrs / $listeners

  • 5.1 跨层级传递属性
  • 5.2 避免中间组件逐层传递

六、provide / inject

  • 6.1 祖先组件 provide 数据
  • 6.2 后代组件 inject 使用
  • 6.3 适用场景与局限性