redux 怎样正确的管理异步数据流?

题主应该已经用了redux-thunk的middleware,现在看到的比较流行的处理异步做法是redux-thunk配合一个截取dispatcher的middleware(假设叫做promiseMiddleware)。按题主的例子,具体流程是:1. 用户点击标签,触发endorse这个action。2. endorse action被promiseMiddleware截取,因为是action是async的,promiseMiddleware当即返回endorseRequest这个action给reducer,同时发出一个request去拿endorse的结果。3. reducer收到endorseRequest,把redux store里isEndorseRequesting这个值改成true4. UI组件根据isEndorseRequesting来渲染endorse按钮(进度条什么的)5. 第2步里面endorse的结果拿回来了,在promiseMiddleware里判断得到的是Success还是Failure,如果是success,返回endorseSuccess这个action给reducer,反之返回endorseFailure给reducer。6. reducer收到endorseSuccess或endorseFailure,把isEndorseRequesting改成false,把endorseResult改成\u0026#39;success\u0026#39;或\u0026#39;failure\u0026#39;(这个具体怎么处理比较随意,看需求)7. UI组件收到了isEndorseRequesting为false,endorseResult为success或failure,根据结果来重新渲染按钮。看起来很复杂,其实是很顺畅的过程,核心就是异步request发出之前先通过reducer,让UI变成requesting状态,等到收到结果之后再变成成功/失败状态。里面涉及到的参考代码:reducer的写法(看一下如何处理LOAD,LOAD_SUCCESS,LOAD_FAILURE即可,ENDORSE也是一回事儿):react-redux-universal-hot-example/widgets.js at master · erikras/react-redux-universal-hot-example · GitHubpromiseMiddleware的写法(这个现在很常见,用thunk的基本都会放这个middleware):react-redux-universal-hot-example/clientMiddleware.js at master · erikras/react-redux-universal-hot-example · GitHub我自己的promiseMiddleware里面还一并处理了如果request成功要redirect的情况(前端pushState的那种redirect),如果需要我可以放上来。
■网友
失败信息要在fetch 的时候判断后把描述字段返回到然后触发error的action给reducer里面的error再流向组件然后rerender.其实就是你说的第二种做法,但是不建议在组件内部fetch,以监听action来获取比较有施展空间,比如异步和并行和丢弃都可以轻松实现。
■网友
request、success、failure 三个actions我比较习惯于返回数据统一格式,然后添加__fetchStatus来判断是在请求未开始、请求中、成功、失败四个状态。react/redux都是以状态为基础,管理状态。 例如成功:{ payload : responseJSON, __fetchStatus : \u0026#39;success\u0026#39;}最近尝试了readux-saga来替代redux-thunk 【redux 怎样正确的管理异步数据流?】 redux 怎样正确的管理异步数据流?


■网友
可以用thunk轻快上手, 但是感觉最近redux-saga更流行了


    推荐阅读