什么时候使用 Redux-saga / Redux thunk 什么时候不用?

When to use Redux-saga / Redux thunk and when not not?

老实说,我知道什么时候使用 Redux 和全局状态,但我看到很多代码库几乎所有 api 调用都使用 Redux-Saga 或 Thunk 一切都保存在商店的全局状态中,所有 api 调用都通过动作或生成器进行

我一直认为 Redux 应该只用于获取全局所需的数据,但到目前为止我看到了一个完全不同的概念,我不知道哪个更好?一个比另一个有优势吗?

再次澄清;这不是 Redux Thunk vs Saga 问题以及何时使用 what

这是调用 apis 并在存储中存储数据与仅使用常规函数(例如 useEffect 挂钩并使用 useState 呈现来自该 api 我觉得过度使用全局状态来管理应用程序中的每一个状态只是超出了全局状态的概念并且可能对性能不利但我已经使用过应用程序,他们使用 Redux 来处理所有事情,无论需要它 所以如果我在我的应用程序中安装了 Redux,这是否意味着所有 api 调用都通过中间件而不管

我是说从设计模式的角度来看

问题是 api 数据是否是本地的 - 大多数时候不是,或者至少随着时间的推移是否可以成为全球数据。

假设您有一个用户配置文件。您只在右上角的指示器中显示它。

稍后,您添加一个用户个人资料页面。而且您也将这些数据保存在本地。

现在你有两个地方的数据,一旦一个地方发生变化,另一个地方就不会自动更新 - 数据 运行 不同步。

这就是为什么始终将服务器端数据视为全局数据是一个明智的选择。这并不意味着您一定需要在那里使用 Redux——像 SWR 或 React Query 这样的库在这方面也可以做得很好。如果您使用的是 Redux,并不意味着您需要手写 thunk。官方的 Redux-Toolkit 自带 RTK Query,它会帮你搞定。

不过请注意,使用 saga 进行 api 抓取几乎总是“过大”。 Sagas 擅长管理非常个别的复杂数据流——但获取数据并不复杂。这几乎是一个已解决的问题。这就是 Redux Toolkit 默认包含 thunk 的原因,我们建议在 Redux Style Guide

中默认使用 thunk

关于我们官方建议如何处理 apis,我建议您看一下 the official Redux Tutorial - 在第 5 章中,它涵盖了使用 thunk 手动处理,在第 7 章和8 它显示了如何使用 RTK 查询。