Redux:每个实体的通用Reducer与Reducer

时间:2019-04-19 09:20:41

标签: javascript reactjs rest redux state

在使用Redux时,通常是更好的做法:基于严格的操作键约定实现特定于实体的reducer 或实现 generic reducer ?以前的解决方案有很多样板代码,但它们松散耦合且更灵活。后一种解决方案具有更少的样板,但更脆弱且更具限制性。

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

首先,该解决方案运行良好,直到我意识到在某些用例中,不同实体资源之间存在结构失配。一些端点返回一个集合,在某些端点返回一个单一结果,依此类推。因此,我不得不分解通用的reducer以适应不同的用例。我开始四处添加条件逻辑的片段。最终发现自己迷失了自己!现在,我很难恢复原状。实际上,从结构上清晰的视野来看,很难很快维护一个大泥巴。

我是否应该放弃通用解决方案,而将商店重构为使用实体特定的减速器,而不管样板如何?有人为复杂的Admin GUI应用程序实际实现并维护了通用的reducer逻辑吗?

1 个答案:

答案 0 :(得分:1)

  

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

正如您已经正确指出的那样,通过许多条件和随后的状态修改,通用解决方案变得非常复杂。

如果我们的小型静态网站可以执行某些操作,则可以使用通用的reducer。

但是,如果您拥有包含大量实体或嵌套实体(可怕)的动态网站,则状态的形状可能会变得非常复杂。我认为,在1个异径管中处理这种形状并不是明智的方法。

具有模块化的reducer还可以完全分离多个动作分派和用户一次执行可能发生的状态更改。

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