Javascript Redux-如何将状态传递给还原器?

Javascript Redux-如何将状态传递给还原器?,javascript,redux,state,Javascript,Redux,State,我只是绕着Redux转了一圈,我只是想问一个问题,state是如何传递给reducer的: 我理解,state的结构由combineReducers()函数决定,您在此函数中定义的键将成为state的各种属性 我说的只有与特定减速器关联的状态的子集被传递给减速器是正确的吗?或者是否传递了整个状态对象 与Redux有很多“啊哈”时刻 组合减速器将多个减速器作为参数并返回减速器。由组合减速器创建的特定减速器只传递指定给特定减速器的部分状态。通过这种方式,每个减速器完全负责其自身的状态部分,仅此而已

我只是绕着Redux转了一圈,我只是想问一个问题,
state
是如何传递给reducer的:

我理解,
state
的结构由
combineReducers()
函数决定,您在此函数中定义的键将成为
state
的各种属性

我说的只有与特定减速器关联的
状态
的子集被传递给减速器是正确的吗?或者是否传递了整个
状态
对象


与Redux有很多“啊哈”时刻

组合减速器将多个减速器作为参数并返回减速器。由组合减速器创建的特定减速器只传递指定给特定减速器的部分状态。通过这种方式,每个减速器完全负责其自身的状态部分,仅此而已

但是,您可以编写自己的组合转换器,它们可以以不同的方式工作。这只是说,
combinereducer
没有什么特别之处

reducer只是一个函数,它接受一个状态和一个动作,并返回以某种方式应用该动作的状态。或不,由其自行决定

例如,在Redux中,状态的不同分支处理相同(一组)操作是很常见的,但处理它们的方式不同,对该部分状态有意义。每个操作都由
组合减速器
传递给所有子减速器,使每个分支的减速器有机会执行某些操作或不执行任何操作

因此,在最常见的用法中,一个减速机只负责状态的一部分,而子减速机(如传递给组合减速机的减速机或您自己的减速机调用的减速机)只负责其子状态/分支

但是您自己的还原程序可能会调用子还原程序并传递它任何您喜欢的内容,例如已经传递给其他还原程序的相同状态,或者甚至是它创建的一些数据,而这些数据从未在全局状态中可用

这些事情并不常见,但如果你看到需要,并且有信心继续前进,你会被鼓励使用你认为最有效的方法。强大的力量伴随着巨大的责任


combinereducer
只是一个常用用例的辅助函数。让一个减速机负责一个州的特定分支可能是最干净的,但在某些情况下,您可能会发现以不同的方式做事是有益的。单个减速器可以通过嵌套来管理复杂对象,而无需调用任何其他减速器,但一种常见的模式是,如果父级变得笨拙,则使用较小的减速器来处理零件

主要的一点是要认识到,reducer始终是一个纯函数,它接受状态和动作并返回状态。你如何做到这一点完全取决于你自己。大多数开发人员选择遵循其他人代码中常见的模式,例如Dan的Redux示例或他在egghead.io上的视频

踏上老路往往是一个良好的出发方式,因为它已经过审查

然而,出于同样的原因,知道为什么要做某事总是很重要的。开发人员有时会使事情变得比需要的更复杂,因为遵循的示例要么是用于其他目的的,要么一开始就没有经过很好的思考


也是丹的文章

非常有用的响应@DDS!我每天都越来越了解。。。首先,我将遵循标准方法,让一个reducer只处理它自己的
状态子集
,看看是否遇到了死角。我怀疑,如果这是绝大多数情况下的最佳实践,那么它将非常适合我。谢谢。@DDS的回复非常好。您可能还想阅读Redux文档的新部分,其中描述了一些有用的模式、方法和常见错误。