Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Redux:通用减速机与每个实体的减速机_Javascript_Reactjs_Rest_Redux_State - Fatal编程技术网

Javascript Redux:通用减速机与每个实体的减速机

Javascript Redux:通用减速机与每个实体的减速机,javascript,reactjs,rest,redux,state,Javascript,Reactjs,Rest,Redux,State,在使用Redux时,通常哪种做法更好:实现特定于实体的缩减器,还是基于严格的操作键控约定实现通用缩减器?前一种解决方案有很多样板代码,但松散耦合且更灵活。后一种解决方案的样板文件较少,但更为脆弱和限制 由于我们的领域有几十个实体,我最初倾向于后一种解决方案。我设计了通用实体缩减器,它利用JavaScript计算的属性名根据调度的操作类型来操作状态。这一切都是动态的,基于惯例 起初,这个解决方案运行良好,直到我意识到在某些用例中不同实体资源之间存在结构不匹配。有些端点返回集合,有些端点返回单个结果

在使用Redux时,通常哪种做法更好:实现特定于实体的缩减器,还是基于严格的操作键控约定实现通用缩减器?前一种解决方案有很多样板代码,但松散耦合且更灵活。后一种解决方案的样板文件较少,但更为脆弱和限制

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

起初,这个解决方案运行良好,直到我意识到在某些用例中不同实体资源之间存在结构不匹配。有些端点返回集合,有些端点返回单个结果,依此类推。因此,我必须分解通用减速机以适应不同的用例。我开始到处添加条件逻辑片段。最终发现自己迷失和困惑!现在我很难让事情恢复正常。建筑上的清晰视觉实际上很难很快地维护一个大泥球

我是否应该放弃通用解决方案,重构存储以使用特定于实体的缩减器,而不考虑样板文件?是否有人为复杂的管理GUI应用程序成功地实现和维护了通用的reducer逻辑

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

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

如果我们有一个具有特定操作的小型静态网站,那么拥有一个通用的reducer是可以的

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

拥有模块化减速机还可以完全解耦多个动作调度和用户单个动作可能发生的状态更改

写了一个精彩的答案,你可能想读一下。

可能是重复的