javascript - redux-saga 注入(inject)两次

标签 javascript reactjs action redux-saga

我有一个 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
}

我将传奇注入(inject) 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;

但是传奇被注入(inject)了两次。那么,我在这里缺少什么?无论 MyComponent 渲染多少次,如何只注入(inject)一次传奇?

最佳答案

But the saga is injected twice. So, what am I missing here?

解决方案取决于 redux-sagas-injector npm 库的工作方式。一般情况下,异步加载和申请saga是一件很困难的事情,因为saga是由“实时”进程管理器组成的,它不能在某些函数调用或对象删除上进行处理。
这意味着 saga 能够启动自定义刻度回调域(Promises、AJAX/XHR、setImmediate 等),而这些回调域无法通过自定义外部代码进行处理(这也是 HMR 不能与sagas 在部分模式下,应该重新加载整个页面)。

因此,如果您在路由器切换上执行 saga 注入(inject),请检查两件事:旧 saga 具有从外部进行处置的隐式操作,例如特殊的内部技术处置操作,并且不存在错误配置在路由器端 - 也许同一页面已启动,例如两次。

关于javascript - redux-saga 注入(inject)两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47416643/

相关文章:

javascript - 如何读取 JSON 格式的对象并将其与用户输入的内容进行比较?

javascript - 对 ASP.NET MVC 操作进行 jquery ajax 调用

templates - Symfony 1.4 更改管理生成器操作或模板

javascript - 访问 document.execCommand 的系统字体?

javascript - iPhone Mobile Safari 在从横向旋转到纵向后强制出现顶部栏(避免 "minimal ui")

javascript - 如何使用 PHP、Jquery 或任何 API 获取 Android 应用程序 ID 或名称?

javascript - 通用 React.JS - 需要样式和图像

javascript - 使用相同的表单更新添加的数据 | react 堆

javascript - 使用 React 和 Ant Design 的 float 标签

asp.net - MVC 4 Web API操作返回: Types vs HttpResponseMessage