React-Redux交叉模块通信



react redux中设置交叉模块通信的正确方法是什么?

假设有一个用例,在某些操作中,我需要更新才能进行多个模块。代码应该去哪里?

示例1:模块A控件为视图A和模块B视图B。在单击模块B中的链接时,我需要将某些操作派遣到模块A和模块B。

或者,如果有一个用例,我需要从模块A或模块B中派遣操作,但是在模块A和模块B中都需要进行一些操作。

我应该如何设计我的应用程序,以便可以正确,清洁处理?(我正在为我的应用程序使用鸭子模式,其中模块由操作 降压器 动作创建者组成)

这是我不喜欢"鸭子"模式的原因之一。引用我的帖子Redux的道,第2部分 - 实践和哲学:

对我来说,"鸭子"模式有一些概念性的弊端。其中之一是,它引导您远离多个切片的想法,可以独立响应相同的动作。关于"鸭子"的任何内容都不会阻止您让多个还原器做出响应,但是将一个文件中的所有内容都在某种程度上表明它们都是独立的,并且与系统其他部分相互作用的可能性不大。依赖链和导入涉及的一些方面也存在一些方面 - 如果系统的任何其他部分都想从鸭子中导入动作创造者,那么在此过程中,它将沿着还原逻辑拖延。还原器实际上可能不会在其他地方导入,但是对该文件有一个依赖性。如果那不会打扰您,请随时使用"鸭子"。

我可以想到四种方法,让两个模块的还原器对相同的动作做出回应:

  1. 使模块直接来自模块B的"鸭"
  2. 在单独的文件中定义操作常数,以便模块A do import * as types from "moduleB/constants"
  3. 复制操作类型字符串,以使模块A实际上并不从模块B
  4. 导入任何内容
  5. 使用单独的副作用库,例如传奇或可观察到的行为,以某种方式将行为粘合在一起。

我个人建议不必担心交叉 - "模块"导入或依赖项,除非您 试图将应用程序的不同部分完全封装在其他所有内容中。<<<<<<<<<<

视图由商店控制,对吗?

因此,当A或B中的操作发生时,只需派遣一个将分别更新B或A中视图的操作。

{
  currentAView: 'product1'
}

单击B视图中的按钮。动作派遣showProduct(product2)

{
  currentAView: 'product2'
}