初学 redux ,想问问 redux 存在异步回调这个功能吗?

2019-03-11 14:22:11 +08:00
 wly19960911
稍微对比了下 mobx 和 redux,redux 的 action 好像没法进行回调,难道是说所有的状态必须放到 reducer 里面?

这样的话很多状态是没必要进入管理的,那么我该怎么处理。

比如说一个场景,当你点击 上传 或者 表单请求 之后,按钮要修改为 disabled, 等请求完毕之后我再修改下状态,这种非全局的状态我怎么管理更好?监听生命周期?
3078 次点击
所在节点    问与答
21 条回复
maichael
2019-03-11 14:33:04 +08:00
redux-thunk
013231
2019-03-11 14:35:51 +08:00
1. 如果你希望 Redux Action 觸發某些動作, 可以考慮 redux-sage: https://github.com/redux-saga/redux-saga
2. 不是所有的狀態都要放到 Redux 里. 像"等待請求完成時修改按鈕為 disabled"這樣相當局部的狀態, 完全沒有必要使用 Redux. https://redux.js.org/faq/organizing-state#do-i-have-to-put-all-my-state-into-redux-should-i-ever-use-react-s-setstate
Kilerd
2019-03-11 14:37:40 +08:00
Redux saga
wly19960911
2019-03-11 14:42:11 +08:00
@maichael #1 redux-thunk 我看了下,调用 dispatch,返回的是 dispatch 里面的东西或者 action return 的东西,那么怎么控制一个 promise 的流程,难道自己写?或者 action 直接用 async/await 来写?
alexsunxl
2019-03-11 14:43:26 +08:00
组件内部状态(或者父子这种近的) 用 this.setState 就可以了。

跨得比较远的组件之间 才需要用到 专门的状态管理工具
grewer
2019-03-11 14:46:07 +08:00
我之前用 redux-promise 的时候
中间层是个 promise ,这时候调用 action 时 ,返回的就是该 promise
不过控制要具体,细分 还是推荐 saga
wly19960911
2019-03-11 14:49:04 +08:00
@alexsunxl #5 这个也不是组件内部状态,如果我是个人信息,我改了昵称,那么这个表单数据就变成了全局状态,肯定要调用 redux 了吧,难道是先自己调用 api 然后通过 action 进行全局更新?看了些 demo 都感觉写的太复杂了,包括 api 调用一套全部写进 action 了。
alexsunxl
2019-03-11 14:53:51 +08:00
@wly19960911
这种就属于跨得比较远的呗
觉得 redux 复杂,就用 mobx 啊。
大型项目我也是用 mobx 的,因为是在团队里,考虑到方便其他人快速上手
wly19960911
2019-03-11 14:55:34 +08:00
@grewer #6
@Kilerd #3 好吧,我再细看看 redux-saga,如果能有一个回调的例子给我就更好了,粗略看了下官方文档,基本都只是简单介绍了 action 里面怎么用,但是组件怎么回调还没有看见......
maichael
2019-03-11 15:00:06 +08:00
@wly19960911 #4 thunk 本质上就是给一个异步函数传入了 dispatch,你可以在里面调用 dispatch 发送 action, 然后修改全局的状态。
wly19960911
2019-03-11 15:01:01 +08:00
@alexsunxl #8 嗯,我知道,其实整体流程我都能整理,mobx 的理念也是我在 angular 里面自己实现的状态管理理念一样,也和 vuex 类似。

但是到了 redux 的概念就复杂了很多,文档的内容比我想象中少很多,我自己理解能力也弱。
maichael
2019-03-11 15:01:38 +08:00
@wly19960911 #9 redux-saga 没有管你自己组件怎么去响应状态变化的,它只帮你管理这些异步方法以及修改全局 store 的数据,然后你自己的组件需要去响应这些全局状态的改变。
zzNucker
2019-03-11 15:01:52 +08:00
redux-saga 然后你会发现蛋疼的很
maichael
2019-03-11 15:02:51 +08:00
@maichael #12 所有 saga 理论上来说跟 thunk 做的事情没什么区别。
wly19960911
2019-03-11 15:03:18 +08:00
@maichael #10 那就能理解了,感谢。
alexsunxl
2019-03-11 16:47:39 +08:00
看过 elm 的 demo 和视频之后, 就觉得 redux 很找人烦。 没有语言结构和 api 层面的基础, 非要学人家绕来绕去, 太反人类。
从此坚决用 mobx
wly19960911
2019-03-11 16:58:30 +08:00
@alexsunxl #16 我可以不用,但是我不能不学(跑

简单的场景也很多,是没必要搞这么复杂就是,我学下来感觉,整个就很像 MVC 设计模式的味道,view 触发了 controller,controller 开始触发各种 action,整体下来做了个简单的事务。

如果可以改成 controller + 注解 action 的模式我感觉负担会少很多,为了理解绕来绕去的例子,我算是花了不少功夫。
alexsunxl
2019-03-11 17:09:38 +08:00
@wly19960911
完全可以不学, 你去看看 elm 的视频就知道了, 没有对比没有伤害
wengjin456123
2019-03-11 19:45:32 +08:00
redux redux saga 我认为太繁琐了…文档这种也没 vuex mobx 舒服
wengjin456123
2019-03-11 19:46:09 +08:00
不过已经学会…下个项目不用了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/543316

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX