Javascript Redux:为什么不把actions和reducer放在同一个文件中?

Javascript Redux:为什么不把actions和reducer放在同一个文件中?,javascript,ecmascript-6,redux,react-redux,Javascript,Ecmascript 6,Redux,React Redux,我正在用Redux创建一个应用程序,我不明白为什么最好将动作和减缩器放在单独的文件中。至少,这是我从所有例子中得到的印象 每个动作或动作创建者似乎都映射到一个由减速机调用的函数(在switch语句中)。将它们放在同一个文件中难道不合乎逻辑吗?它还使得对动作类型和开关大小写使用相同的常量变得更容易,因为它不必在文件之间导出/导入。来自Redux创建者Dan Abramov: 许多减速器可以处理一个动作。一个减速器可以处理多个减速器 行动。把它们放在一起否定了通量和 Redux应用程序规模。这会导致

我正在用Redux创建一个应用程序,我不明白为什么最好将动作和减缩器放在单独的文件中。至少,这是我从所有例子中得到的印象


每个动作或动作创建者似乎都映射到一个由减速机调用的函数(在switch语句中)。将它们放在同一个文件中难道不合乎逻辑吗?它还使得对动作类型和开关大小写使用相同的常量变得更容易,因为它不必在文件之间导出/导入。

来自Redux创建者Dan Abramov:

许多减速器可以处理一个动作。一个减速器可以处理多个减速器 行动。把它们放在一起否定了通量和 Redux应用程序规模。这会导致代码膨胀,而且不必要 耦合。你失去了对同一个动作做出反应的灵活性 不同的地方,你的动作创造者开始像 “设置器”,耦合到特定状态形状,从而耦合 它的组件也是如此

从:

我们建议您编写独立的小型减速机函数,每个函数 负责状态特定部分的更新。我们称之为 “减速器组成”模式。一个特定的行动可以由所有人来处理, 一些,或者没有。这将使组件与实际组件分离 数据更改,因为一个操作可能会影响状态的不同部分 树,组件不需要知道这一点


有关更多信息,请参阅和。

将操作和还原程序保存在单独的文件中有助于保持代码模块化

它可以更容易地发现bug,扩展代码,并且通常在尽可能小的部分上工作

例如:

将API错误消息保存到Redux存储可能会有所帮助

如果我忘记用其中一个减缩器上的传入错误更新存储,那么在多个文件中很难找到


如果我在同一个文件中查看多个减速机,就会更容易看到其中一个减速机缺少
错误:action.payload
行。

如果您愿意,请这样做。说其他话的人都不知道您喜欢什么和不喜欢什么。引用丹·阿布拉莫夫(一个优秀的开发人员)的话来描述一切的人都是些没头脑的人

现在Redux正式发布,鼓励将它们保存在同一个文件中。这是更好的,你将能够看到一个功能到一个文件,而不是许多。现在,同样的人会开始称赞将他们保存在同一个文件中


为提出POST请求而更新类型、操作、简化程序和操作(thunk/saga)是一种可怕的开发体验。天生迟钝的人可以支持这样的事情,因为他们看不到影响。

相关:假设你是一个团队的一员,正在开发一个机场管理应用程序。您负责构建应用程序中处理航班状态消息的部分。另一个开发者正在开发应用程序的另一个部分,它处理跑道上起飞和降落的计划。应用程序的这两个部分由Redux状态的完全不同的分支处理,使用不同的还原器。你和其他开发人员都编写了还原程序,需要对应用程序特定部分的FLIGHT_取消操作做出响应,即使你们两人都不知道对方在做什么。啊,好吧!现在它有意义了。那么你会说这有点像pub-sub模式吗?实际上没有多个reducer订阅任何东西。创建存储或调用
store.replaceReducer()
时,实际上只有一个根减缩器(可以由其他减缩器组成,但它仍然是一个函数)。当一个动作被调度时,。不,我明白了。它与pub-sub非常相似,因为分派一个动作与处理它的方式是分离的,您可以在多个开关中处理同一个动作。是的,在这个意义上有相似之处。但我不会那样想,因为有很多不同之处。我想说,它更像是一个简单的观察者模式,其中只有一个观察者(商店的
currentReducer
)。事实上,您可以将其他还原程序组合到根还原程序中是一个极大的方便,但它与多个观察程序并不完全相同。最好记住,所有合成的还原器最终都是一个接受每个动作的还原器。