RTK Query 概览
- RTK Query 是什么以及它解决了哪些问题
- RTK Query 包含哪些 API
- RTK Query 的基本用法
RTK Query 是一个强大的数据获取和缓存工具。它旨在简化 Web 应用程序中常见的数据加载情况,消除了手动编写数据获取和缓存逻辑的需要。
RTK Query 是 Redux Toolkit 包中包含的一个可选附加组件,其功能是构建在 Redux Toolkit 的其他 API 之上的。
要了解如何使用 RTK Query,请参阅 Redux 核心文档站点上的完整的 "Redux Essentials" 教程。
如果您更喜欢视频课程,您可以免费观看 RTK Query 的 Egghead 上由 RTK Query 的创建者 Lenz Weber-Tronic 所讲的视频课程,或者在这里查看第一课的内容:
动机
Web应用通常需要从服务器获取数据以进行显示。它们通常也需要更新这些数据,将这些更新发送到服务器,并保持客户端上的缓存数据与服务器上的数据同步。这被今天的应用程序中使用的其他行为的实现所复杂化:
- 跟踪加载状态以显示UI旋转器
- 避免对同一数据的重复请求
- 乐观的更新以使UI感觉更快
- 随着用户与UI的交互,管理缓存的生命周期
Redux核心一直非常简洁 - 开发人员需要编写所有实际的逻辑。这意味着Redux从未包含任何内置的帮助解决这些用例的东西。Redux文档已经教授了一些常见的模式,用于在请求 生命周期周围调度动作以跟踪加载状态和请求结果,以及Redux Toolkit的createAsyncThunk
API被设计为抽象这种典型模式。然而,用户仍然需要编写大量的reducer逻辑来管理加载状态和缓存数据。
在过去的几年中,React社区已经意识到**"数据获取和缓存"实际上是一组与"状态管理"不同的关注点**。虽然你可以使用像Redux这样的状态管理库来缓存数据,但是用例足够不同,值得使用为数据获取用例专门构建的工具。
RTK Query从其他工具中汲取灵感,这些工具已经为数据获取开创了解决方案,如Apollo Client、React Query、Urql和SWR,但是对其API设计增加了独特的方法:
- 数据获取和缓存逻辑是建立在Redux Toolkit的
createSlice
和createAsyncThunk
API之上的 - 因为Redux Toolkit是UI不可知的,所以RTK Query的功能可以与任何UI层一起使用
- API端点是提前定义的,包括如何从参数生成查询参数和转换响应以进行缓存
- RTK Query还可以生成React钩子,这些钩子封装了整个数据获取过程,向组件提供
data
和isLoading
字段,并在组件挂载和卸载时管理缓存数据的生命周期 - RTK Query提供了"缓存条目生命周期"选项,这些选项使得在获取初始数据后通过websocket消息进行流式缓存更新的用例成为可能
- 我们有早期的从OpenAPI和GraphQL模式生成API切片的代码生成示例
- 最后,RTK Query完全用TypeScript编写,并且旨在提供出色的TS使用体验
包含内容
API
RTK Query包含在核心Redux Toolkit包的安装中。它可以通过以下两个入口点之一获得:
import { createApi } from '@reduxjs/toolkit/query'
/* 针对React的特定入口点,自动生成与定义的端点相对应的钩子 */
import { createApi } from '@reduxjs/toolkit/query/react'
RTK Query包括这些API:
createApi()
:RTK Query功能的核心。它允许你定义一组"端点",描述如何从后端API和其他异步源获取数据,包括如何获取和转换该数据的配置。在大多数情况下,你应该在每个应用程序中使用一次,以"每个基础URL一个API切片"为经验法则。fetchBaseQuery()
:围绕fetch
的小包装器,旨在简化请求。作为大多数用户在createApi
中使用的推荐baseQuery
。<ApiProvider />
:如果你还没有Redux存储,可以作为Provider
使用。setupListeners()
:用于启用refetchOnMount
和refetchOnReconnect
行为的实用程序。