首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过redux-actions来表达REQUEST / START action?

如何通过redux-actions来表达REQUEST / START action?
EN

Stack Overflow用户
提问于 2017-10-12 20:40:23
回答 1查看 138关注 0票数 0

我想使用redux-actions来简化我的react-redux代码,但我有一个问题:

假设我得到了"load“操作,它从远程获取一些主题。所以代码应该是:

代码语言:javascript
复制
const load = createActions('LOAD');

export function fetch() {
  return (dispatch, getState) => {
    dispatch(fetchTopicsRequest());   // <- here is my question.
    return network
      .request('/topics?' + qs.stringify(getState().topics.filter.options))
      .then(network.handleResponse)
      .then(result => dispatch(load(result)))     // <- here I got the topics in the payload
      .catch(error => dispatch(load(error)));     // <- here I got the errors in the payload, in the reducer I check on the "error" field to see if the request successed.
  };
}

我认为用一个操作就能处理结果和错误是很好的。但是如何用同样的动作来表达“请求”状态呢?由于上面的代码我没有弄清楚,所以我不得不做另一个动作"fetchTopicsRequest()",这使得整个代码看起来很奇怪。

从前面的讨论中,我注意到过去有一个“status”字段,在这种情况下它可能很方便。它跑到哪里去了?或者我只是错过了一些更好的想法?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2017-10-12 21:11:36

首先,我想纠正你对你所说的行为的理解。在你的例子中,函数fetch()是一个能够分派动作的动作创建者,load(result)load(error)是实际被分派的动作。

现在,当您正在寻找更好的fetchTopicsRequest()操作实现时,我建议您使用传统的方法来编写操作。在您的例子中,应该是这样的:

代码语言:javascript
复制
dispatch({type: 'FETCHING_TOPICS'});

现在,您可以在您的reducer中捕获此操作,并在topics获取时执行任何操作。

更新:

要处理pending的情况,您可以使用action和reducer的组合。一旦FETCHING_TOPICS操作被分派,那么在reducer中,您可以将pending标记为true,一旦接收到response,您就可以将pending更改为false,如下所示:

代码语言:javascript
复制
function reducer(state={pending: null}, action) {
  switch(action.type) {
    case 'FETCHING_TOPICS':
      return {...state, pending: true};
      break;
    case 'FETCHED_TOPICS':
      return {...state, pending: false, //payload if any};
      break;
    case 'FETCHING_ERR':
      return {...state, pending: false, //payload if any};
      break;
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46709865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档