2016-10-29 53 views
2

我只是环绕我的头周围的终极版,我只是想跑通过state是如何传递到减速器一个问题:Redux - 状态如何传递给reducer?

据我了解,state结构由combineReducers()功能决定和这些密钥是你在这个函数内定义的将会变成state的各种属性。

我是在说是与特定的减速相关的state子集被传递到减速机正确吗?或者是整个state对象通过?

与Redux有很多'ahahhh'时刻...!

回答

2

combineReducers以一些减速器作为参数并返回一个减速器。由combineReducers创建的特定减速器仅传递指定给特定减速器的状态部分。通过这种方式,每个减速器完全负责自己的国家部分,仅此而已。

但是你可以编写你自己的联合减速机,它可以工作不同。这只是说combineReducers没有什么特别之处。

reducer只是一个函数,它接受一个状态和一个动作,并以某种方式返回应用该动作的状态。或者不是,根据自己的判断。

例如,在Redux中,状态的单独分支处理相同(一组)行为通常是不同的,但它们以不同的方式处理,这对状态的该部分有意义。每个行动都会通过combineReducers传递给所有子减排者,让每个分支的减员有机会做某事,或者什么也不做。

因此,在最常见的用法中,减速器全权负责状态和子减速器的切片,例如传递给组合减速器的那些切片或由您自己的减速器调用的减速器全部负责其子状态/科。

但是你自己的reducer可能会调用一个子reducer并传递任何你喜欢的东西,比如已经传递给其他reducer的相同状态,或者甚至是它创建的一些数据,没有它在全局中可用州。

这些事情并不常见,但如果你看到需要,并且有信心继续前进,那么我们鼓励你使用你认为最好的方法。大国有很大的责任。

combineReducers只是一个常见用例的帮助函数。让一个减速机负责国家的一个特定部门可能是最干净的,但是有些情况下你会发现以不同的方式做事情是有益的。一个reducer可以通过嵌套来管理一个复杂的对象,而不需要调用任何其他的reducer,但是一个普通的模式就是使较小的reducer来处理部分,如果父类变得笨拙。

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

在挨打的道路上行驶往往是一个很好的开始,因为它已经过审查。

但是,出于同样的原因,知道为什么要做某件事总是很重要的。开发人员有时候会让事情变得比需要的复杂,因为他们会遵循一个例子,这个例子要么是针对其他事情的,要么是没有很好地开始。

另外read this文章由丹。

+0

非常有帮助的回复@DDS!我每天都越来越了解......我将首先遵循让reducer处理自己的“state”子集的标准方法,并看看是否遇到任何死刑。我怀疑,如果这是绝大多数情况下的最佳做法,那么它会适合我。谢谢。 –

+0

@ DDS的反应非常好。您也可以阅读Redux文档的新增[“Structuring Reducers”](http://redux.js.org/docs/recipes/StructuringReducers.html)部分,其中描述了一些有用的模式,配方,以及常见的错误。 – markerikson

相关问题