业务场景:有 A 和 B 两个表格,互为兄弟组件,当 A 中某个事件调用完成之后需要触发 B 表格中的更新。
解决办法:使用发布-订阅模式,在 A 表格中订阅事件,等 B 表格中发布后通知它
代码实现:
1 | export class SubscriptionPublish { |
代码使用:我们在写完发布-订阅类的代码之后在里面创建一个实例,用作全局使用
- A 表格
1 | const ApiTable: FC = () => { |
- B 表格
1 | const Index: FC = () => { |
发布-订阅模式专门用于解决兄弟组件间通信的问题,不局限于 React
,其他的地方原理是一样的,同样可以解决类似问题的还有观察者模式。我这里只是针对于我这样的业务场景下写的。
提到发布-订阅模式就必然绕不开观察者模式,两者非常相似,很大的一个区别是发布-订阅模式多了一个第三方,即事件中心。在这个过程中,我们只需要维护一个事件中心,发布者不关心谁订阅了我的事件,订阅者不关心发布者是谁,通过事件中心来通知订阅者。