React Query 和 Redux 的主要区别是什么?

What is the main difference between React Query and Redux?

目前我在不同的项目中使用 redux 进行状态管理。几天前,我听说 react-query 也用于状态管理并提供缓存和异步获取。我试图找出这两个库之间的主要区别。 我应该在哪里使用 react-query 以及在什么情况下我需要 redux.

React-query 就是您所说的专门库。它为您保留了一个 api 缓存 - 仅此而已。由于它是专门的,因此它可以很好地完成这项工作并且需要更少的代码。

另一方面,Redux 为您提供了几乎可以存储任何东西的工具——但您必须编写逻辑。因此,您可以在 Redux 中做更多的事情,但您可能不得不编写专用库不需要的代码。

您可以同时使用它们:api 在 React 查询中缓存,在 Redux 中其余的全局状态。

也就是说,官方 Redux Toolkit 还附带了一个 api 缓存抽象 RTK Query 自版本 1.6 以来具有与 React Query 类似的功能集,但总体上有一些不同的概念 - 您可能还需要检查一下。

Reduxreact-query 是两个截然不同的东西:react-query 用于数据同步,Redux 是全局状态管理器。 react-query 用于将所有应用程序同步到同一个数据库,Redux 用于将应用程序状态的一部分共享给需要读取该状态的所有组件。

举个例子:我有一个可以与其他用户聊天的应用程序。使用 react-query,我将所有应用程序与用户收到的所有消息保持同步,然后将消息存储在 Redux 中,以便在聊天页面和历史聊天页面上显示消息。

  • React-Query = 服务器状态库(save/cache api 响应)
  • Redux = 客户端状态库(可全局访问的客户端状态 应该存储)。

有关 react-queryredux 的更多信息,请查看此 link

React Query 管理服务器状态。它的主要功能是处理Server和client之间的函数。

Redux 处理客户端状态。 Redux 可用于异步存储数据。

因此,它们在不同级别上具有独特的作用,并且两者可以并排使用。

react-query 旨在处理存储在远程服务器上的数据。要访问此数据,您的应用需要使用异步请求。这是您可能想要处理缓存、加载状态、网络故障等的地方。

这就是 react-query 的闪光点。

另一端的 Redux 处理客户端的数据。例如文本输入的内容或模式的状态。您无需处理与网络相关的问题。但是您确实需要处理复杂的因果序列。

这就是 redux 的亮点

我们应该区分两种状态,客户端状态 & 服务器(或远程)状态:

  • 客户端状态包含:
    • 本地创建的数据尚未持久化到服务器。
    • UI 处理活动路由、选定选项卡、微调器、分页控件等的状态。
  • 服务器状态与以下各项相关:
    • 需要异步 API 来获取和更新的远程持久化数据

当谈到客户端状态时,Redux 是一个用于管理应用程序状态的 grate 管理工具。

另一方面,要管理服务器状态,我们可以使用常规状态管理工具,但它们不太适合处理异步或服务器状态。所以,为了解决这个问题,我们使用 React Query。如他们的文档所述,React 查询 是一个很好的工具:

  • 缓存...(可能是编程中最难做的事情)
  • 将对同一数据的多个请求去重到一个请求中
  • 正在后台更新“过时”数据
  • 了解数据何时“过时”
  • 尽快反映数据更新
  • 分页和延迟加载数据等性能优化
  • 管理服务器状态的内存和垃圾收集
  • 通过结构共享记忆查询结果