javascript - Redux:调用相同的 api 但调度不同的操作
问题描述
目前我有一个 redux 操作,它是getUsers()
让所有用户。
export function getUsers (params) {
return async dispatch => {
await dispatch({ type: 'GET_USERS_REQUEST' });
const urlParams = params ? new URLSearchParams(Object.entries(params)) : null;
return axios({
method: 'get',
url: Environment.GET_USERS+ `?${urlParams}`,
headers: { 'Content-Type': 'application/json' },
}).then (async res => {
await dispatch({ type: 'GET_USERS_SUCCESS', allUsers: res.data.Data });
}).catch (err => {
dispatch({ type: 'GET_USERS_FAILURE', error: err.toString() });
});
}
}
现在我想使用相同getUsers()
但带有参数 id(例如。getUsers({ UserId: 'jamesbond007' })
),并且在我想要的操作中dispatch({ type: 'GET_USER_BY_ID_SUCCESS', user: res.data.Data })
如何使用相同的 api 调用调度不同的操作?我应该复制相同的代码但更改操作调度吗?如果这样做,它将成为重复功能。
解决方案
您可以通过参数 id 决定操作,例如
// all users, paramId is null
// a user, paramId is xxxx
const action = paramId ?
{ type: 'GET_USER_BY_ID_SUCCESS', user: res.data.Data } :
{ type: 'GET_USERS_SUCCESS', allUsers: res.data.Data };
dispatch(action);
但是,我认为你的想法并不好。最好用两种方法做逻辑。它是可读的。
推荐阅读
- ffmpeg - FFmpeg:如何循环播放单帧视频以覆盖音轨的长度
- javascript - 从 Javascript 对象重新定义 MongoDB _id 属性
- java - 代号一 BrowserComponent 不工作
- php - android avd 连接到 localhost php 流明端口 8000
- c++ - C6385 从“ss”读取无效数据:可读大小为“352”字节,但可以读取“-176”字节
- apache-spark - 在 Databricks 中发布流式增量表
- vba - 如何防止嵌入式图表数据的“链接”丢失
- python - 当我为一个 cc 文件添加 CMakeLists 时,Clion 没有将 .py 文件识别为 python 文件
- scalatest - ScalaTest HTML 报告格式错误
- appium - 运行 Appium 脚本以启动计算器应用程序时出错