簡體   English   中英

redux-saga注射兩次

[英]redux-saga injected twice

我有一個被稱為一次的redux-saga,但它執行了兩次。

這是開始傳奇的動作:

export function createRequest (data) {
  return {
    type: CREATE_REQUEST,
    payload: {data}
  };
}

我的sagas.js文件看起來是這樣的:

export function* create (x) {
  try {
    const response = yield call(request, URL_TO_API, Object.assign({}, buildBaseHeaders('en'), {
      method: 'post',
      body: JSON.stringify(x.payload.data)
    }));
    yield put(createSuccess(response));
  } catch (error) {
    yield put(createFailure(error));
  }
}

... my other sagas

export default function* defaultSaga () {
  yield takeLatest(CREATE_REQUEST, create);
  ... my other calls
}

我將Sagas注入我的React組件的方式是這樣的:

const withConnect = connect(mapStateToProps, mapDispatchToProps);
const withReducer = injectReducer({key: 'myComponent', reducer});
const withSaga = injectSaga({key: 'myComponent', saga});

export default compose(withReducer, withSaga, withConnect) MyComponent;

但是傳奇被注射了兩次。 那么,我在這里想念什么? 無論MyComponent渲染了多少次,我如何都只能注入傳奇一次?

但是傳奇被注射了兩次。 那么,我在這里想念什么?

解決方案取決於redux-sagas-injector npm庫的工作方式。 在一般情況下,異步加載和應用Sagas是一件困難的事情,因為saga由“實時”進程管理器組成,不能在某些函數調用或對象刪除上進行處理。
它暗示着saga具有啟動自定義滴答回調域(Promises,AJAX / XHR, setImmediate等)的能力,而該域無法從自定義外部代碼中setImmediate (這也是原因,為什么HMR無法在部分模式下使用sagas並應重新加載)整個頁面)。

因此,如果您在路由器交換上執行saga注入,請檢查兩件事:舊的Saga具有從外部進行隱式處理的操作(例如特殊的內部技術處理操作),並且在路由器端沒有配置錯誤-可能啟動了同一頁面,例如兩次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM