我只是把我的脑袋包裹在Redux周围,我只是想问一下state
如何传递给Reducer的问题:
我理解state
的结构由combineReducers()
函数决定,并且您在此函数中定义的键将成为state
的各种属性。
我是否正确地说仅与特定reducer相关联的state
子集被传递给reducer?或者整个state
对象是否已通过?
有很多' ahahhh'与Redux的时刻......!
答案 0 :(得分:2)
combineReducers
将多个reducer作为参数并返回一个reducer。 combineReducers
创建的特定reducer只传递分配给特定reducer的状态部分。这样每个减速器完全掌控其自身的一部分状态,仅此而已。
但是你可以编写自己的combineReducers,它可以以不同的方式工作。这只是说combineReducers
没有什么特别之处。
reducer只是一个接受状态和动作的函数,并以某种方式返回应用了动作的状态。或者不是,由它自行决定。
例如,在Redux中,状态的不同分支通常处理相同的(一组)动作,但是以对状态的该部分有意义的不同方式处理它们。每个动作都通过combineReducers
传递给所有子减速器,使每个分支的减速器有机会做某事或什么也不做。
因此,在大多数常见用法中,减速器仅负责一部分状态和子减速器,例如传递给combineReducers的减速器,或者由您自己的减速器调用的减速器,它们对其子状态/分支负全部责任
但是你自己的reducer可能会调用一个sub-reducer并将它传递给你喜欢的任何东西,例如已经传递给其他reducer的相同状态,或者甚至是它创建的一些数据而没有它在全局状态下可用
这些事情并不常见,但是如果你发现需要,并且有信心继续前进,那么我们鼓励你使用你认为最有效的东西。伟大的力量带来了巨大的责任。
combineReducers
只是一个常见用例的辅助函数。使一个减速器负责该州的某个特定分支可能是最干净的,但是在某些情况下您可能会发现以不同方式执行操作是有益的。单个reducer可以使用嵌套来管理复杂对象,而无需调用任何其他reducer,但是如果父级变得笨重,常见的模式是使较小的reducers处理部件。
要点是要意识到reducer总是一个纯函数,它接受状态和动作并返回一个状态。你如何实现这一点完全取决于你。大多数开发人员选择遵循其他代码中的常见模式,例如Dan的Redux示例或他在egghead.io上的视频。
走在人迹罕至的路上往往是一个很好的开始,因为它已经过审查。
然而,出于同样的原因,知道为什么要做某事总是很重要的。开发人员有时会使事情变得比它需要的更复杂,因为它遵循一个例子,这个例子既可以用于其他事情,也可以从一开始就没有考虑过。
Dan的read this文章。