【问题标题】:redux saga api call is getting executed multiple times for single button clickredux saga api调用被多次执行以单击单个按钮
【发布时间】:2021-08-05 18:29:33
【问题描述】:

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

【问题讨论】:

    标签: reactjs redux redux-saga


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      你需要把 takeLatest 放到你的 watcher saga 中。但是,当捕获到特定操作时,您还必须传递应该调用的 saga 作为参考。应该是这样的:

      export function* trackerRequestSaga() {
          yield all([
              takeLatest(updatePrdTrackerStatus.ACCEPTDOCUMENTS_SETUP, updateAcceptDocumentStatus),
      
          ]);
      }
      

      【讨论】:

      • 感谢您的建议@yovchokalev
      • 实际上不,我在我的 saga 初始化文件中犯了错误。
      • 啊,我也看到了你的回答。酷。
      猜你喜欢
      • 2020-10-28
      • 1970-01-01
      • 2019-08-15
      • 2021-06-24
      • 1970-01-01
      • 2022-08-08
      • 2019-10-04
      • 2013-02-04
      • 1970-01-01
      相关资源
      最近更新 更多