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