Redux中什么情况下非得需要异步action?

#1

今天想到一个问题,项目里全是同步action,比如,某个组件需要从服务器获取一些数据,然后dispatch到store的state中,然后与其他组件共享。我的做法是将所有action都保持是同步的,在各个组件中通过某个内部方法获取异步数据,然后dispatch。这种情况也可以用异步action。

我能想到的异步action的优点是:1、便于维护管理,一旦服务端对请求参数有改变或者返回的数据发生变化那么可以在action中直接更改,不用到项目组件中去修改。2、多个组件需要根据不同的需求dispatch数据到store中,可以在异步action中根据不同的参数选择不同的获取方式,对请求后端数据的方法进行了复用。3、将异步获取数据逻辑从组件业务中抽离出来,方便管理。这样对吗?除此之外还有其他优点吗?

#2

除了可以在顶层维护以外没有什么优点,有些时候还不如在组件里写来的方便

#3

这是之前在比bat的逼格高的宇宙条面试的时候遇到的一个问题。

#4

一个过来人确切的告诉你,这么做是非常正确的,你把所有的数据,同步数据异步数据都当作数据,而组件只负责显示数据,组件的每一个数据都设置默认值,而与组件打交道的就是connect dispatch,这样组件只负责渲染,数据则存在store里。你的数据是可缓存的,最后你的应用会跑的非常快。除了首屏加载,当然你可以做loading处理。而且你的逻辑清晰,修改起来也丝滑般的体验。
这样你就加班少,做东西快,思路清晰。好了,你已经晋升为高级程序员了。

#5

可是,为了一个loading,每次都dispatch,特别麻烦,有好的解决方案不?

#6

如果你只有少量状态,你可以用16.8的 useReducer

#7

好的,谢谢!

#8

你可以选择把异步的ajax方法统一封装下,这个封装好的方法在每次发出请求前,自动dispatch,这样能避免你每次都自己单独写一次dispatch

#9

这样子会不会有问题,比如只能是全局的loading,而不是局部组件的loading,毕竟全局dispatch,如何区分不同组件的loading呢?