首先redux解决异步action的问题的方式是在需要的时候去 dispatch一个函数,函数里面是一堆中间件,同时发送一个ajax,等ajax请求成功了再去dispatch真正的action;
那为什么不是这样 => 在需要的时候直接ajax请求,等请求成功了在去dispatch action?
感觉可以省略dispatch 函数这一步啊
首先redux解决异步action的问题的方式是在需要的时候去 dispatch一个函数,函数里面是一堆中间件,同时发送一个ajax,等ajax请求成功了再去dispatch真正的action;
那为什么不是这样 => 在需要的时候直接ajax请求,等请求成功了在去dispatch action?
感觉可以省略dispatch 函数这一步啊
因为使用现行的写法,异步代码和同步代码在业务逻辑层面完全一致。你仅需要在 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) }
}
3 回答1.9k 阅读✓ 已解决
1 回答1.6k 阅读✓ 已解决
4 回答1.6k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
你的第一步没描述清楚;dispatch的是action,一般就是一个plain object;
通常在state store里应该有一个request的表述,它有两个作用,第一个是显示当前已经发送请求,可显示等待,以及可阻止重复发送;第二个是可以取消,这也是常见的用户行为;如果这两点都不需要,允许用户猛击一个按钮无数次的发送请求,那么确实是可以不在store里记录request/handle的,把结果当外部事件来处理;一切取决于你对你的模型的最小完备状态定义。