我是新来的反应/ redux。我试图弄清楚redux中的所有部分是如何相互作用的。给我带来麻烦的一件事是理解行动和减速器之间的关系。调用操作时,商店如何知道要使用哪个减速器?它是否完全基于动作类型名称?类型名称必须是唯一的吗? reducer将新状态对象传递给的是谁或什么,商店还是动作?
据我了解,它是这样的:
答案 0 :(得分:8)
1:商店如何知道使用哪种减速机 - >这完全基于动作类型。
2:类型名称必须是唯一的吗? - >这不是一个规则。但大多数情况下是的。每个操作都有一个不同的类型名称,并调用相应的reducer。
3:reducer将新状态对象传递给的人或者什么,商店或行动? - > reducer不会在任何地方传递新的状态对象。基本上,它会触发一个状态更改事件,指向正在侦听它的所有反应组件。使用新版本的状态重新呈现侦听已更改状态的所有组件,从而更新DOM。
答案 1 :(得分:4)
在典型的Redux设置中,操作被分派给所有减速器,由减速器决定是否关心该动作。一个常见的模式是reducer中的一个开关,用于检查action.type,包含它关心的操作的情况以及一个只返回当前状态的默认情况:
export default (state = false, action) => {
switch (action.type) {
case START_LOADING:
return true;
case STOP_LOADING:
return false;
default:
return state;
}
}
在这种情况下,我告诉我的reducer它只关心START_LOADING
或STOP_LOADING
类型的操作,而在所有其他情况下它应该只返回它之前的状态。
为了更好地理解Redux(和Flux),我建议您查看Lin Clark或Code Cartoons的video,其中涵盖了大部分相同的内容。
答案 2 :(得分:3)
通常,您只有一个减速器负责完整状态。
这个reducer可以分成不同的较小的reducer函数,每个函数负责一个不同的状态切片。例如Redux's combineReducers()
utility可以做到这一点,但您也可以手动完成。
如果您使用combineReducers()
,将为每个已分派的操作执行每个reducer函数。然后,他们纯粹根据操作类型决定操作是否应该影响其状态切片。如果是,则返回此切片的更新副本。如果其切片不受操作影响,则返回不变。