【问题标题】:Redux: Generic Reducer vs Reducer per EntityRedux:通用减速器与每个实体的减速器
【发布时间】:2019-04-19 09:20:40
【问题描述】:

使用 Redux 时,通常更好的做法是:实现 entity specific reducer 还是基于严格的 action keying 约定实现 generic reducer?以前的解决方案有很多样板代码,但松耦合且更灵活。后一种解决方案的样板更少,但更脆弱和限制性更强。

由于我们的域有几十个实体,我最初倾向于后一种解决方案。我设计了通用实体化简器,它利用 JavaScript 计算属性名称根据调度的动作类型来操纵状态。这一切都是动态的和基于约定的。

起初,该解决方案运行良好,直到我意识到在某些用例中不同实体资源之间存在结构不匹配。一些端点返回一个集合,其中一些返回一个结果等等。因此我不得不分解通用化简器以适应不同的用例。我开始在这里和那里添加条件逻辑的 sn-ps。最终发现自己迷失了方向!现在我很难让事情恢复正常。在架构上清晰的视觉实际上很快就很难维持大泥球。

我是否应该放弃通用解决方案并重构商店以使用实体特定的减速器而不考虑样板?是否有人真正成功地为复杂的 Admin GUI 应用程序实现和维护了通用减速器逻辑?

【问题讨论】:

标签: javascript reactjs rest redux state


【解决方案1】:

起初解决方案效果很好,直到我意识到有一个 在某些用途中不同实体资源之间的结构不匹配 案例。一些端点返回一个集合,其中一些返回一个 单结果等等。因此我不得不将通用减速器分解为 适应不同的用例。

正如您正确指出的那样,通用解决方案很快就会变得非常复杂,有很多条件和后续的状态修改。

如果我们有具有某些操作的小型静态网站,则可以使用通用减速器。

但是,如果您拥有包含大量实体或嵌套实体的动态网站(可怕),则状态的形状会变得非常复杂。在我看来,在 1 个减速器中处理这种形状并不是一个谨慎的方法。

使用模块化 reducer 还可以完全解耦多个动作调度和用户单个动作可能发生的状态更改。

@Kos 写了一个精彩的答案here,您可能想阅读。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多