何时使用 Redux-saga / Redux thunk 何时不使用? [关闭]

Posted

技术标签:

【中文标题】何时使用 Redux-saga / Redux thunk 何时不使用? [关闭]【英文标题】:When to use Redux-saga / Redux thunk and when not not? [closed] 【发布时间】:2022-01-16 11:45:31 【问题描述】:

说实话,我知道何时使用 Redux 和全局状态,但我已经看到很多代码库都使用 Redux-Saga 或 Thunk 进行几乎所有 api 调用 一切都保存在 store 的全局状态中,所有 api 调用都通过操作或生成器进行

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

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

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

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

【问题讨论】:

这似乎是***.com/q/54302091/691711的副本 不,它没有阅读下面的 cmets redux 中不包含所有内容是完全可以的。 因此,如果我在页面中调用一些 api,为应用程序的某些部分向下传递一些道具,而我还有其他部分需要 redux 中的全局状态,这是一个好习惯吗? 是的。如果一个状态没有被共享,并且在存储中没有任何好处,那就不要这样做。我们通常从尽可能小的存储开始,然后重构以仅在必要时将数据从组件移动到存储。 【参考方案1】:

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

假设您有一个用户个人资料。您只在右上角的指示器中显示它。

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

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

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

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

关于我们正式推荐如何处理 api,我建议您查看 the official Redux Tutorial - 在第 5 章中介绍了使用 thunk 手动处理,在第 7 章和第 8 章中展示了如何使用 RTK Query .

【讨论】:

非常感谢,我想这就是我的问题的简单答案

以上是关于何时使用 Redux-saga / Redux thunk 何时不使用? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用 Redux-Observable 而不是 Redux-Saga?

redux-saga

为啥使用 redux-thunk 或 redux-saga 进行 fetches?

手写Redux-Saga源码

Redux-saga

关于 redux-toolkit redux-saga 的一些问题