Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 二次注射_Javascript_Reactjs_Action_Redux Saga - Fatal编程技术网

Javascript 二次注射

Javascript 二次注射,javascript,reactjs,action,redux-saga,Javascript,Reactjs,Action,Redux Saga,我有一个redux传奇,叫做一次,但它执行了两次 这是故事的开始: 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, Obj

我有一个redux传奇,叫做一次,但它执行了两次

这是故事的开始:

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
}
我将传奇故事注入我的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渲染多少次,我怎么能只注入一次传奇

但这一传奇被注入了两次。那么,我错过了什么

解决方案取决于npm库的工作方式。一般情况下,异步加载和应用saga是一件困难的事情,因为
saga
由“实时”流程管理器组成,不能在某些函数调用或对象删除时进行处理。
这意味着saga能够启动定制的tick回调域(Promises、AJAX/XHR、
setImmediate
等),这些域不能从定制的外部代码中释放(这也是为什么HMR不能在部分模式下使用
sagas
并应重新加载整个页面的原因)


所以,如果您在路由器交换上执行
saga
注入,请检查两件事:旧的saga有从外部处理的隐式操作,如特殊的内部技术处理操作,以及路由器端没有错误配置-可能同一页面启动过,例如,两次。

谁调用createSaga?如果它运行了两次,一次失败,那么在create函数中只运行一次就可以了。我在这里错过了整个画面:/saga
create
是通过
createRequest
操作调用的。这个动作用了一次,但是这个故事叫了两次。哦,好吧,现在我没有主意了:(