现在有没有比较好的,快速简单的替代 redux-saga 的使用方法?

2021-07-03 07:05:41 +08:00
 yazoox

我们现在使用的框架是 react, redux + saga

目前正在做一个组件,需要单独放在一个包内。前段时间,根据大家的建议,发现 useReducer + useContext 可以基本取代 redux + redux store,试下来,还是不错的。

但是,我们以前都是使用 redux-saga,统一处理异步调用和相关逻辑。虽然 saga 使用起来也是费劲( unit test 贼难写),但是,功能还是很强大的。比如,集中化处理,代码都在一下,以及 在 saga function 内,还能够灵活的 dispath action(s),触发其它的相关异步操作。

现在组件在一个单独的包内,没有使用 redux store,应该也没有办法添加 redux-saga 了吧(还是说,可以继续添加 saga 中间件)?那么,该怎么优雅的处理这些异步调用么?全用 hooks 么?

以某流程举个例子:

现在有一个用 redux 包装好的高阶组件,上面有一个 button, 点击 button,发送 action - 从某服务器取数据,然后 saga 监听到该 action,执行这个取数据的异步调用。调用成功取到数据后,再次发送 action,进行二次处理,等等。最后,发送一个 action,把最终结果更新到 store/state 。然后,前面的组件接受到更新,展示出来。

不知道没有了 saga 后,这一套连续的操作,有没有更好的或者新的处理方法?

特来请教大家。谢谢

2981 次点击
所在节点    React
10 条回复
Loserzhu
2021-07-03 08:00:35 +08:00
我们在用 react-query,逐步替换掉 saga 。你可以了解下。
Hanggi
2021-07-03 08:36:45 +08:00
recoil 了解下。

redux 太罗嗦了,替代方案很多。
duan602728596
2021-07-03 08:48:18 +08:00
redux 本来就不适合在组件里用。redux 适合用来保存全局状态,跨组件调用方法、获取变量。我的项目里用的是 redux-toolkit,感觉这个用起来比 redux-saga 舒服多了。

redux 就好比电线、组件就好比电器。电器电源线插到插座上就能用,但是不代表电器里面的所有线路都要接到电源线上。就像星际里的卡拉,虽然神圣的卡拉连接着每一个人,但是每个人的思想、状态还是有区别的。

你这种流程,完全可以用一个 hook 来代替,比如这样:
```javascript
const {
loading, // 加载状态
getData, // 获取数据的方法,可以用来重新获取数据
data, // 数据
... // 其他状态,比如数据总数、分页之类的
} = useRequest({ /* 配置 */ });

```

状态全放在 redux 里这种用法,我以前在项目里碰到过,我接手后给我留下一堆问题。比如有定义了一堆的 action type,导致一个流程的代码跳来跳去,action type 看不出来是做什么的;还有就是组件的所有状态被扔到 redux 里边,导致组件不能被复用的。
laogui
2021-07-03 08:58:13 +08:00
mobx,简单实用。
kangyan
2021-07-03 10:14:09 +08:00
dva
ericgui
2021-07-03 13:28:27 +08:00
redux 是管理全局的 state,context 是一个小型的区域性的 state,可以混合起来,
比如一个大项目,当然用 redux,但大项目里有一个比较独立的模块,可以用 context
rioshikelong121
2021-07-03 17:11:16 +08:00
要继续用 redux 的话可以引入 redux-toolkits 减少了大量的样板代码。

然后 redux-toolkits 最近出了个 rtk-query 的东西 —— 定位和 swr.js 类似,也可以用用。
AnnatarHe
2021-07-04 23:47:51 +08:00
我个人的经验是:
真的超大型项目,操作逻辑非常复杂的情况才会上 redux + redux-saga 规模略小确实是挺麻烦。
比较中小的项目是纯 hooks,数据状态同步全依赖后端数据和缓存,像是上文中的 react-query 。
中型项目最近在尝试 recoil 感觉还不错。

顺便说一句,saga 写单元测试很方便呀,为什么会觉得很麻烦,只要测主逻辑就好了哎~
h1104350235
2021-07-05 09:21:37 +08:00
同问,感觉 React 的选择有点多
yazoox
2021-07-05 11:12:03 +08:00
这个,为什么大家都在说 redux 的问题,可是我的问题是 saga 哎。
redux 现在好办,用 useContext 取代 redux 的 store,但是可以继续用 @reduxjs/toolkit 辅助创建对应的 actions & reducer,还是挺方便的。
就是 saga (redux-saga) 现在找不到比较好的方法......

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

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

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

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

© 2021 V2EX