首页 > 解决方案 > 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 调用多次。不确定我在传奇部分中缺少什么。谁能帮帮我。谢谢。

标签: reactjsreduxredux-saga

解决方案


我的商店配置文件有问题。

 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);
  }

推荐阅读