为了账号安全,请及时绑定邮箱和手机立即绑定

redux中间件对于异步action的意义是什么?

redux中间件对于异步action的意义是什么?

人到中年有点甜 2019-05-22 17:14:54
不太理解类似于redux-thunk这样的中间件对于发送异步action有什么意义,不可以在异步回调之后直接手动dispatch一个action吗?
查看完整描述

2 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

首先,我不知道你入和对意义的定义?性能变好?代码可读性增加?扩展性变强?
Ifyou’renotsurewhetheryouneedit,youprobablydon’t.如果你处于这个阶段,你可以选择不用,官方描述。
你觉的你当前代码写的很舒服,那么为什么需要额外的引入你不了解的东西呢?当然不需要
想要知道thunk有没有意义?可以先从文档上了解
这是thunk的motivationReduxThunkmiddlewareallowsyoutowriteactioncreatorsthatreturnafunctioninsteadofanaction
就是你可以dispatch(function)。
下来谈谈你的问题,不可以在异步回调之后直接手动dispatch一个action吗?
当然可以。你在异步回调之后直接dispatch,这可以啊,我觉的没什么不好。
这里主要看你对action的定义,就以网络请求为例,列个简单比较。
xxxAction(xxxData){
return{
type:xxxType,
data:xxxData
}
}
//直接放在你需要使用的地方
fetchXxxData().then((res)=>{
dispatch(xxxAction(xxx))
})
这种情况下,你将你xxxAction定义为一个通过数据来修改store数据的action
getXxxDataAction(){
return(dispatch)=>{
fetchXxxxData().then((res)=>{
dispatch(xxxAction(res))
})
}
}
使用方式
store.dispatch(getXxxDataAction())
这种情况下,你将这个getXxxDataAction定义为一个从后台获取数据变修改store库中的Action
其实你会发现这两个写法基本是一致的,上面那种方法是没有问题的。上面的方法可以看做是下面方法的解耦。解除了请求和修改store之间的关系。所以根本没有什么非得用谁,只是你当前的场景适合用谁。
下面方法的好处是什么,就是比如我在这个系统中,我的请求和修改数据的关系是恒定不变的,那么我不解耦的用法可能会更加的舒服。比如
A需要获取xxx数据,并存入store中。B也需要获取xxx数据,并存入store中。
下面这种只需要在两个组件中去添加这句store.dispatch(getXxxDataAction())而上面那种就必须把请求以及回调来重复写一遍,同样的代码两个路口,一旦涉及到需要修改的时候,就很容易会遗漏
                            
查看完整回答
反对 回复 2019-05-22
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

当你异步回调一个action时,如果不依赖这个异步返回的数据时,没有问题。当要依赖返回的数据时就出问题了。因为接口还没返回,这个dispatch就已经发出了。所以在redux-thunk中,使用一个promise来对异步的处理。你可以参考一下rudex-saga或者dva,都对异步做了很好的处理。
                            
查看完整回答
反对 回复 2019-05-22
  • 2 回答
  • 0 关注
  • 496 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号