rc-redux-model icon indicating copy to clipboard operation
rc-redux-model copied to clipboard

为什么使用redux-thunk不使用redux-saga做为中间件?

Open zhangwei900808 opened this issue 4 years ago • 4 comments

按照react redux最佳实践,应该redux-saga才是最佳选择啊,使用thunk是有什么其它考虑么?

zhangwei900808 avatar Sep 19 '20 02:09 zhangwei900808

按照react redux最佳实践,应该redux-saga才是最佳选择啊,使用thunk是有什么其它考虑么?

我个人的理解是最佳实践是要基于项目实际情况来说的。

saga的很多好的特性很多小项目用不到,使用起来就会比较臃肿和费劲。倒不如使用轻巧的thunk来的方便。

总归还是要看实际场景。

ForeverPx avatar Sep 19 '20 03:09 ForeverPx

这个问题问得好,讲讲我个人的见解 : 本质上,redux 只支持同步Action的操作,对于异步它是无能为力的,这就使得社区内部有许多中间件,如 redux-thunk、redux-saga、redux-promise 等。

在做这个中间件的时候,我也在思考异步该如何处理,那么最为重要的一点就是 : 考虑这个中间件的定位和初衷是什么?

世间万物均有其存在的价值,如 thunk、saga等,它们之所以这么火,一定是它们解决了一些问题,各自有自身的优点。

回过头再看我做这个中间件的定位和初衷,我的目的仅仅是为了解决 :

  • 在做一些demo或者小项目上,使用dva相对于“笨重”,但又想像写 dva 的数据状态管理 model 那种方式
  • 如果使用saga,那么是不是可能存在一些繁琐重复的工作?
  • 包括像同步的action,我都需要在reducer去写action,如果能提供默认的action去修改state值,是不是在开发体验上更舒服些?

相比之下,异步action的“占比”并不是很大了,只要能解决异步action的问题即可,在阅读了 redux-thunk 源码之后,再如同楼上老哥所说,确实saga的好特性在我这个中间件中,并没有发挥它的亮点,引入反而臃肿,所以就参考 redux-thunk 的源码,能轻巧简洁处理更好。

所以这就是最终的选择~

PDKSophia avatar Sep 19 '20 03:09 PDKSophia

@ForeverPx @PDKSophia 我的想法是可以提供thunk和saga版本供开发者选择,我可以不用但是框架一定要有!而且既然你都说了只做demo和小项目,我觉得react就更不适合了,反而vue更简单,用react做项目应该都是考虑到项目会很大,而且你们也加入了immutable.js对数据做更好的处理,所以用thunk有点说不过去。

zhangwei900808 avatar Sep 19 '20 13:09 zhangwei900808

楼上的说得很好。我个人觉得,最开始选择的时候,就要判断是vue还是react,如果大项目,就不要用小框架了,万一不够用还得重新写。而且dva虽然臃肿,不过最佳实践并不复杂,至少我用过vue的store,感觉这个完全可以接受。

mogocat avatar Jan 26 '21 03:01 mogocat