4

我正在使用 Axios、Redux 和 Redux Promise 中间件。

我有以下动作创建者:

return {
        type: 'FETCH_USERS',
        payload: axios.get('http://localhost:8080/users',
            {
                params: {
                    page
                }
            }
        )
    }

在我的减速器中FETCH_USERS_PENDING,我想将请求的 url 保存在我的状态中。我怎样才能做到这一点?

4

2 回答 2

14

你想使用redux-promise-middleware 的“元”变量。像这样:

return {
  type: 'FETCH_USERS',
  meta: { url: 'http://localhost:8080/users' },
  payload: axios.get('http://localhost:8080/users', config)
}

您可以在您的参数中传递它,但在获取页面之前不会返回。这意味着它不会在 FETCH_USERS_PENDING 期间传回。

而且我很确定如果您直接包含在返回对象中(就像卢卡斯建议的那样),它将被剥离出 FETCH_USERS_PENDING 阶段。

这是 redux-promise-middleware 的 FETCH_USERS_PENDING 阶段:

  /**
   * First, dispatch the pending action. This flux standard action object
   * describes the pending state of a promise and will include any data
   * (for optimistic updates) and/or meta from the original action.
   */
  next({
    type: `${type}_${PENDING}`,
    ...(data !== undefined ? { payload: data } : {}),
    ...(meta !== undefined ? { meta } : {})
  });

正如您在此阶段所看到的,中间件返回附加的“类型”属性并检查“数据”和“元”属性。如果存在,它们将在动作中传递。

如果您想进一步研究,这里是redux-promise-middleware 源代码。

于 2017-05-05T16:22:02.433 回答
0

只需在操作中传递 URL:

return {
  type: 'FETCH_USERS',
  url: 'http://localhost:8080/users',
  payload: axios.get('http://localhost:8080/users', {
    params: {
      page
    }
  }
}

并在减速器中使用action.url. 或者您可以保留该操作,并在承诺解决方案中访问它:

action.payload.then(function(response) {
  var url = response.config.url;
});
于 2017-02-22T21:08:04.057 回答