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



目前我在不同的项目中使用redux进行状态管理。几天前,我听说了react-query,它也用于状态管理,并提供缓存和异步获取。我正试图弄清楚这两个图书馆之间的主要区别。我应该在哪里使用react-query,在哪些情况下我需要redux。

React查询就是您所说的专用库。它为您保存了一个api缓存,没有其他内容。由于它是专业化的,所以它能很好地完成这项工作,并且需要更少的代码。

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

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

也就是说,官方的Redux Toolkit自1.6版以来还附带了一个api缓存抽象RTK Query,其功能集与React Query相似,但总体上有一些不同的概念-你可能也想看看。

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

这就是react查询的闪光点。

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

这就是redux闪耀的地方

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

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

React Query管理服务器状态。它的主要功能是处理服务器和客户端之间的功能。

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

因此,它们在不同的层面上都有其独特的作用,两者都可以同时使用。

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

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

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

在客户端状态方面,Redux是用于管理应用程序状态的网格管理工具。

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

  • 正在缓存。。。(可能是编程中最难做的事情)
  • 将对同一数据的多个请求消除为一个请求
  • 更新";"过时";后台数据
  • 知道何时数据是";"过时">
  • 尽快反映数据更新
  • 性能优化,如分页和延迟加载数据
  • 管理内存和服务器状态的垃圾收集
  • 使用结构共享记忆查询结果

您可以简单地思考:

  • React Query=axios+缓存逻辑
  • Redux可以存储同步数据和异步数据

顺便说一句,我现在使用context管理同步状态,React Query管理异步状态。

如果您的应用程序具有复杂的状态管理或需要在多个组件之间共享状态,

Redux是一个不错的选择。

另一方面

React Query可以用于需要大量数据提取的应用程序。它提供了从API获取、缓存和更新数据的功能。

简而言之,我们可以说,如果我们有很多API可供使用,并且我们的主要功能是显示来自API的数据,那么RQ是更好的选择。另一方面,如果您需要对应用程序的状态进行更多的控制和数据处理,Redux是更好的选择。

反应查询:

  • 主要专注于数据获取/更新/缓存/同步
  • 在应用程序频繁调用api时发挥重要作用
  • 缓存时间可以更改

冗余:

  • 主要专注于客户端的状态管理
  • 需要实现像store/action/reducer这样的主要代码
  • 全局状态管理不依赖于时间

相关内容

最新更新