使用 RTK Query 的好处:可扩展且高效的解决方案

简介: 使用 RTK Query 的好处:可扩展且高效的解决方案

作为开发人员,我们一直在寻找简化工作流程和提高应用程序性能的方法。在 React 生态系统中获得巨大关注的一个工具是 Redux 工具包查询 (RTK Query)。这个库建立在 Redux Toolkit 之上,提供了一个用于管理异步数据获取和缓存的解决方案。在本文中,我们将探讨使用 RTK Query 的主要优势。

使用 RTK Query 的好处:可扩展且高效的解决方案

1. 简单易用

       RTK Query 最引人注目的优势之一是它的简单性。这样就可以轻松地为各种操作定义端点,例如查询数据以及创建、更新和删除资源。该方法允许您以简洁和声明性的方式定义这些终结点,从而减少样板代码并提高可读性。injectEndpoints

1
booksApi.injectEndpoints({
2


3
  endpoints: builder => ({
4


5
    getBooks: builder.query<IBook[], void | string[]>({
6


7
      // ...
8


9
    }),
10


11
    createBundle: builder.mutation<any, void>({
12


13
      // ...
14


15
    }),
16


17
    addBook: builder.mutation<string, AddBookArgs>({
18


19
      // ...
20


21
    }),
22


23
    // ...
24


25
  }),
26


27
});

2. 自动缓存和失效

       RTK Query 的特点之一是其内置的缓存机制。该库会自动缓存从端点获取的数据,确保从缓存中处理对相同数据的后续请求,从而减少网络开销并提高性能。这些示例演示了 RTK Query 如何使用该选项处理缓存失效。

1
createBundle: builder.mutation<any, void>({
2


3
  invalidatesTags: [BooksTag],
4


5
  // ...
6


7
}),
8


9
addBook: builder.mutation<string, AddBookArgs>({
10


11
  invalidatesTags: [BooksTag],
12


13
  // ...
14


15
}),

通过指定 ,RTK 查询知道在执行更改(例如,或)时要使哪些缓存条目失效,从而确保缓存保持最新并与服务器数据一致。BooksTagcreateBundleaddBook

3. 可扩展性和可维护性

       随着应用程序复杂性的增加,管理异步数据提取和缓存可能变得越来越具有挑战性。RTK Query 的模块化方法和关注点分离使扩展和维护代码库变得更加容易。每个终结点都是独立定义的,因此您可以根据需要轻松添加、修改或删除终结点,而不会影响应用程序的其余部分。

1
endpoints: builder => ({
2


3
  getBooks: builder.query<IBook[], void | string[]>({
4


5
    // ...
6


7
  }),
8


9
  createBundle: builder.mutation<any, void>({
10


11
    // ...
12


13
  }),
14


15
  // ...
16


17
})

这种模块化结构促进了代码的可重用性,并使其更容易对应用程序的不同部分进行推理,从而在团队中实现更好的可维护性和协作。

4. 高效的数据获取和规范化

       RTK Query 内置支持高效的数据获取和规范化。演示如何从多个源获取数据并使用该函数规范化数据。但是,可以优化当前的实现,以减少代码重复并提高可读性。下面是代码的优化版本:queryFntoSimpleBooks

1
async queryFn(collections) {
2


3
  try {
4


5
    const [snapshot, snapshot2] = await Promise.all(
6


7
      collections.map(fetchCachedCollection)
8


9
    ]);
10


11
    const success = await getBooksBundle();
12


13
    const books = success
14


15
      ? toSimpleBooks([...snapshot.docs, ...snapshot2.docs])
16


17
      : [];
18


19
    return { data: books };
20


21
  } catch (error) {
22


23
    return { error };
24


25
  }
26


27
}

在这个优化版本中,我们用于同时获取两个集合( 和 )。这种方法可确保我们不必等待一个集合完成提取后再开始另一个集合,从而可能减少整体提取时间。Promise.alllatest-books-1-querylatest-books-2-query

       此外,我们已将调用移至块内,确保仅当成功获取集合时才执行调用。此更改有助于保持明确的关注点分离,并使代码更易于推理。getBooksBundletry

       通过利用 RTK Query 的高效数据获取功能并采用最佳实践,您可以确保您的应用程序以优化和高效的方式获取和规范化数据,从而提高性能和用户体验。Promise.all

5.外露钩子的易用性

       RTK Query 的突出功能之一是它通过其公开的钩子提供的易用性。最后,我喜欢导出可用的生成类型化钩子,以便您可以使用它们(即 、 等)与 React 组件中定义的端点进行交互。这些钩子抽象化了管理异步数据提取和缓存的复杂性,使你能够专注于构建应用程序的逻辑。useGetBooksQueryuseCreateBundleMutation

1
export const {
2


3
  useGetBooksQuery,
4


5
  useLazyGetBooksQuery,
6


7
  useCreateBundleMutation,
8


9
  useAddBookMutation,
10


11
  useDeleteBookMutation,
12


13
  useUpdateBookMutation,
14


15
} = booksApi;

通过利用这些钩子,您可以获取数据、触发突变并处理加载和错误状态,同时受益于 RTK Query 提供的缓存和失效机制。

       通过采用 RTK Query,您可以访问用于管理异步数据获取和缓存的解决方案,同时体验其公开的钩子提供的简单性、可扩展性和易用性。无论您是构建小型应用程序还是大型项目,RTK Query 都可以帮助您简化开发流程并提供高性能、响应迅速的应用程序。

目录
相关文章
|
运维 监控 安全
在Linux系统中,认证日志
Linux系统中的认证日志对于安全监控和故障排查至关重要,常见的日志文件包括:`/var/log/auth.log`(Debian、Ubuntu)、`/var/log/secure`(RPM发行版)、`/var/log/lastlog`、`/var/log/faillog`、`/var/log/wtmp`和`/var/run/utmp`。这些文件记录登录尝试、失败、当前用户等信息。日志管理可通过文本编辑器、日志查看工具或`rsyslog`、`syslog-ng`等工具进行。注意日志位置可能因发行版和配置差异而变化,应确保日志文件的安全访问,并定期轮转归档以保护敏感信息和节省空间。
607 3
|
前端开发 JavaScript
【Ant Design Pro】使用ant design pro做为你的开发模板(一)拉取项目
【Ant Design Pro】使用ant design pro做为你的开发模板(一)拉取项目
1990 0
【Ant Design Pro】使用ant design pro做为你的开发模板(一)拉取项目
|
存储 前端开发
react-几步搞定redux-persist-持久化存储
其实在vuex-persist持久化,用的也是这个东西 这个东西 就是持久化,其实所谓的持久化,在前端而言,一般都是指存储到 localStorage里面,因为刷新也还在嘛,不像存在其他地方刷新就没了,这里不讨论存储到本地文件 我们在react再玩一遍,看看有啥不同,找点新鲜感
1525 0
react-几步搞定redux-persist-持久化存储
|
11月前
|
消息中间件 存储 缓存
如何设计10亿用户级的微博Feed流系统并应对100W QPS的挑战?
本文详解微博Feed流系统设计,涵盖Timeline与Rank模式、推拉结合机制及四层雪崩防护体系,分享应对百万QPS高并发的架构经验,助力构建高效、稳定的大规模社交系统。
|
JavaScript CDN
js:spark-md5分片计算文件的md5值
js:spark-md5分片计算文件的md5值
2515 0
|
5月前
|
存储 关系型数据库 API
向量数据库对比:Pinecone、Chroma、Weaviate 的架构与适用场景
本文对比Pinecone(生产级)、Chroma(轻量原型)和Weaviate(混合搜索)三大向量数据库,结合真实生产经验与可运行Python代码,详解其适用场景、部署要点与迁移策略,助你为RAG系统选对检索引擎。
594 3
向量数据库对比:Pinecone、Chroma、Weaviate 的架构与适用场景
|
存储 文字识别 文件存储
飞桨x昇腾生态适配方案:03_模型训练迁移
本案例以PaddleOCRv4模型为例,详细介绍了将模型迁移到NPU的完整流程。迁移过程中需确保模型功能在新硬件上无误,重点关注偶发性错误及长时间运行时可能出现的问题,并通过日志辅助定位问题。文档涵盖环境搭建、数据集准备、模型配置、训练启动及常见问题排查等内容。例如,通过设置环境变量排查缺失算子,处理Paddle版本兼容性问题,以及解决进程残留等。适合希望将OCR模型部署到NPU的开发者参考。
741 0
|
缓存 安全 数据挖掘
阿里云服务器目前活动中各实例规格适用场景汇总,选择指南参考
本文将基于2025年阿里云服务器相关活动的最新内容,对各个实例规格的适用场景进行详细汇总,并提供选择指南参考,帮助用户轻松选购到最适合自己的云服务器实例。
|
前端开发 数据安全/隐私保护
react antd 实现修改密码(原密码,新密码,再次输入新密码,新密码增加正则复杂度校验)
文章介绍了如何在React项目中使用Ant Design实现一个修改密码的组件,包括原密码、新密码和再次输入新密码的表单项,并为新密码增加了正则表达式复杂度校验。
564 1
react antd 实现修改密码(原密码,新密码,再次输入新密码,新密码增加正则复杂度校验)
|
SQL 存储 数据可视化
【开源项目推荐】通用SQL数据血缘分析工具——Sqllineage
【开源项目推荐】通用SQL数据血缘分析工具——Sqllineage
2325 57

热门文章

最新文章