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