reactjs - redux saga api调用被多次执行以单击单个按钮
问题描述
我是 redux saga 中的新蜜蜂,试图通过 saga 进行 api 调用,但它被多次触发。下面是我的代码,
component.js(我的 useEffect 方法中的调度操作)
dispatch({type: updatePrdTrackerStatus.ACCEPTDOCUMENTS_SETUP , payload: {...someValues}});
mySaga.js
` function* updateAcceptDocumentStatus() {
const {payload } = yield take( updatePrdTrackerStatus.ACCEPTDOCUMENTS_SETUP );
const result = yield call(updateTrackerStatusHandler,payload);
yield put({ type: updatePrdTrackerStatus.ACCEPTDOCUMENTS_SETUP_RESULT , payload:result})
}
async function updateTrackerStatusHandler (tracker){
await http.post("apicall");
const { data } = await http.post("api call2");
return data;
}
}
export function* trackerRequestSaga() {
yield all([
updateAcceptDocumentStatus(),
]);
}
结果是 api 1 和 api 2 调用多次。不确定我在传奇部分中缺少什么。谁能帮帮我。谢谢。
解决方案
我的商店配置文件有问题。
const configStore = () => {
const store = createStore(rootReducer,applyMiddleware(...middleWares));
sagaMiddleWare.run(initSagas)
return store;
}
modified to below then its getting called one time
const configStore = createStore(rootReducer,applyMiddleware(sagaMiddleWare));
sagaMiddleWare.run(initSagas)
export default configStore;
我在我的 saga 文件中修改了 saga 函数以 takeLatest 如下所示
export function* update() {
yield takeLatest('TAKE_REST',methodName);
}
推荐阅读
- php - 如何在许多文件中查找和替换字符串
- bash - 如何使用 awk 在 bash 中格式化电话号码
- java - 从路径获取 jar 文件,并更改其类名
- typescript - 如何修复“browser.takeScreenshot”代理错误?
- azure-web-app-service - 如何使网站站点在 Internet 上的 8080 端口上可见
- c# - Wpf mediaelement播放没有声音的视频
- android - 如何在 Android 中卸载 Travel Mate 应用程序?
- webpack - 使用 WebpackChain 配置带有 glob 的 import scss(gridsome 或 vue-cli)
- html - Html 内容中的视频不会出现在颤动上
- c++ - 消除重载方法的歧义失败