Redux Thunk共享异步对象

时间:2017-11-02 08:10:40

标签: reactjs redux react-redux redux-thunk

如果我有跟随thunk:

function postReq(body) {
  return dispatch =>
    superagent.post("/files")
              .then(response => dispatch(actionCreator(response)));
}

我如何与代码库的其他部分共享superagent请求对象?我会将它传递给actionCreate并将其放入商店吗?

我想中止某些事件的请求,这就是我正在寻找的原因。

修改 为手头的问题提供更多背景信息。当用户上传文件时,他可以选择中止上传。当我在thunk中创建superagent请求时,我需要传递请求对象才能调用superagent.abort()

1 个答案:

答案 0 :(得分:1)

首先,我想向您介绍一些ES6功能,这些功能可以让您的代码更具可读性。现在你有:

function postReq(body) {
  return dispatch =>
    superagent.post("/files")
              .then(response => dispatch(actionCreator(response)));
}

首先,您可以使用ES6通过两个步骤使您的功能更具可读性:

第1步

更新您的操作创建者以存储在成本变量中:

const postReq = (body) => {
      return dispatch =>
        superagent.post("/files")
                  .then(response => dispatch(actionCreator(response)));
}

<强>第二步

您的函数正在返回一个函数,因此您可以通过隐式返回使其更短且更易读:

const postReq = (body) => (dispatch) => {
            superagent.post("/files")
                      .then(response => dispatch(actionCreator(response)));
}

现在,回答你可以尝试做他们在这里公开的事情: https://github.com/reactjs/redux/issues/1461#issuecomment-190165193

适用于您的情况的是:

const postReq = (body) => (dispatch) => {
       superagent.post("/files")
                  .then(response => dispatch(actionCreator(response)));

      const abort = superagent.abort.bind(superagent)
      return { abort }       
}

我自己从未这样做,但据我所知,它将abort方法绑定到一个变量,该变量将被返回并执行存储在那里的函数将调用postReq上下文中的abort方法。