Props, Emit, Provide, Inject…

Vue 的组件通信方式多达十几种。父子通信用 Props/Emit,跨层级用 Provide/Inject,兄弟组件用 EventBus(Vue 3 移除了,得自己手写或用mitt),全局状态用 Pinia。

传值的痛苦

当你有 5 层组件嵌套,最外层的组件想传个 ID 给最里面的组件。
Props Drilling(属性透传)简直是灾难。

Parent -> Child -> GrandChild -> GreatGrandChild -> Target

每一层都要声明 Props,写得我想吐。虽说可以用 provide/inject,但不仅失去了类型推断的便利(TS 还要额外定义 InjectionKey),而且数据流变得难以追踪。

通信