关于redux异步的问题

首先redux解决异步action的问题的方式是在需要的时候去 dispatch一个函数,函数里面是一堆中间件,同时发送一个ajax,等ajax请求成功了再去dispatch真正的action;
那为什么不是这样 => 在需要的时候直接ajax请求,等请求成功了在去dispatch action?
感觉可以省略dispatch 函数这一步啊

阅读 4.9k
3 个回答

你的第一步没描述清楚;dispatch的是action,一般就是一个plain object;

通常在state store里应该有一个request的表述,它有两个作用,第一个是显示当前已经发送请求,可显示等待,以及可阻止重复发送;第二个是可以取消,这也是常见的用户行为;如果这两点都不需要,允许用户猛击一个按钮无数次的发送请求,那么确实是可以不在store里记录request/handle的,把结果当外部事件来处理;一切取决于你对你的模型的最小完备状态定义。

因为使用现行的写法,异步代码和同步代码在业务逻辑层面完全一致。你仅需要在 actionCreator 这里进行区分,而不需要修改业务逻辑,起到了解耦合的作用。

按照你所说的,完全也可以实现,但是写起来就是这样的:

// 同步业务逻辑
dispatch(syncAction(data));
// 异步业务逻辑
fetch().then(data => dispatch(syncAction(data)));

而按照现行方式,实现起来就是这样:

// 同步业务逻辑
dispatch(syncAction(data));
// 异步业务逻辑,基本与同步相同
dispatch(asyncAction(data));

只需要在 action 这里进行微小的区分

function asyncAction(data) {
    return { type: '', payload: fetch(data) }
}

你说的那种方式完全可以实现,但是,如果没有 request 的 action,组件怎么知道请求已经开始?这样做只是一种更好的 practice

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题