reactjs - 如何调度多个动作
问题描述
我正在尝试从 reducer 调度函数,但它只调用一个函数。
减速器看起来像这样:
import types from "./types";
const initState = {
active: false,
myData: []
};
function toggleActive(state, action) {
return {
...state,
active: action.payload
};
}
function watchInfo(state, action) {
return {
...state,
myData: action.payload
};
}
const watchReducer = (state = initState, action) => {
switch (action.type) {
case types.TOGGLE_ACTIVE:
return toggleActive(state, action);
case types.WATCH_DATA:
return watchInfo(state, action);
default:
return state;
}
};
export default watchReducer;
并且动作创建者设置如下:
import types from "./types";
function toggleActive(bool) {
return {
type: types.TOGGLE_ACTIVE,
payload: bool
};
}
function watchInfo(data) {
return dispatch => {
dispatch({
type: types.WATCH_DATA,
payload: data
});
};
}
export { toggleActive as default, watchInfo };
在我正在导入连接和相应的动作创建者的组件中,我试图像这样使用它:
const mapStateToProps = state => {
const mapDispatchToProps = dispatch => ({
watchInfo: () => dispatch(watchInfo())
});
export default connect
mapDispatchToProps
)(MyComponent);
因此,当我在 redux 控制台中检查时,它只调用 toggleActive,从不调用 watch info。
我不确定我做错了什么。
解决方案
更改此动作创建者
function watchInfo(data) {
return dispatch => {
dispatch({
type: types.WATCH_DATA,
payload: data
});
};
}
到:
function watchInfo(data) {
return {
type: types.WATCH_DATA,
payload: data
}
}
动作创建者是一个返回代表动作的对象的函数。我们使用动作创建器来更好地维护代码并防止一些拼写错误,但是这段代码:
dispatch(watchInfo(someData))
相当于:
dispatch({
type: types.WATCH_DATA,
payload: someData
})
推荐阅读
- unity3d - 测试 Unity 在远程构建?
- python - 如何使用python读取文本文件并以html格式输出
- python - 选择了未定义的列 - 在 R 中尝试将两个数据帧相乘
- amazon-web-services - S3 通知创建多个事件
- electron-builder - 使用电子生成器的最小包
- android - 验证 Toast 消息
- visual-studio - Git 因致命错误而失败。从 VS 2017 克隆存储库时身份验证失败
- r - parApply() 是否划分矩阵然后处理每个?
- javascript - 在 Laravel 的搜索表单中将获取参数作为漂亮 URL 发送的问题
- r - 如何分隔ggplot2 geom_point中的车道组?