首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
V2EX  ›  问与答

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

  •  
  •   wly19960911 · 40 天前 · 823 次点击
    这是一个创建于 40 天前的主题,其中的信息可能已经有所发展或是发生改变。
    稍微对比了下 mobx 和 redux,redux 的 action 好像没法进行回调,难道是说所有的状态必须放到 reducer 里面?

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

    比如说一个场景,当你点击 上传 或者 表单请求 之后,按钮要修改为 disabled, 等请求完毕之后我再修改下状态,这种非全局的状态我怎么管理更好?监听生命周期?
    第 1 条附言  ·  40 天前
    只需要用 redux-chunk + async/await 来处理即可,action 返回的是 promise 就能进行回调了。

    另外: https://github.com/redux-saga/redux-saga/issues/1188

    刚玩 redux-saga 就碰到类型系统的 bug,看来不支持 ts 玩,我还是乖乖用 chunk 吧,不想给自己添负担了
    21 回复  |  直到 2019-03-11 23:22:58 +08:00
        1
    maichael   40 天前
    redux-thunk
        2
    013231   40 天前
    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
        3
    Kilerd   40 天前 via iPhone
    Redux saga
        4
    wly19960911   40 天前
    @maichael #1 redux-thunk 我看了下,调用 dispatch,返回的是 dispatch 里面的东西或者 action return 的东西,那么怎么控制一个 promise 的流程,难道自己写?或者 action 直接用 async/await 来写?
        5
    alexsunxl   40 天前
    组件内部状态(或者父子这种近的) 用 this.setState 就可以了。

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

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

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

    如果可以改成 controller + 注解 action 的模式我感觉负担会少很多,为了理解绕来绕去的例子,我算是花了不少功夫。
        18
    alexsunxl   40 天前
    @wly19960911
    完全可以不学, 你去看看 elm 的视频就知道了, 没有对比没有伤害
        19
    wengjin456123   40 天前 via Android
    redux redux saga 我认为太繁琐了…文档这种也没 vuex mobx 舒服
        20
    wengjin456123   40 天前 via Android
    不过已经学会…下个项目不用了
        21
    hirasawayui   39 天前
    mobx vuex 真香,我再也不会用 redux 了
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2353 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 18ms · UTC 14:44 · PVG 22:44 · LAX 07:44 · JFK 10:44
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1