梗概
React Query 是一个用于管理和缓存服务端数据的强大库,专注于简化 React 应用中数据获取、缓存和同步的流程。它通过声明式的 API 使得开发者能够更高效地处理异步请求,自动管理请求状态(如加载中、错误、成功等),并且内置了多种高级特性,如自动重试、后台刷新和分页等。
核心概念
-
Query(查询)
用于获取和缓存服务端数据。每个 query 都有唯一的 key 来标识,React Query 会根据这个 key 自动管理缓存和更新。 -
Mutation(变更)
用于创建、更新或删除服务器上的数据。与 query 不同的是 mutation 通常是触发某个操作而不是持续订阅数据。 -
Cache(缓存)
React Query 会在内存中保存请求结果,避免重复请求,并能智能地刷新缓存以保证数据新鲜度。 -
Query Client
管理所有 query 和 mutation 的实例,通常在应用根组件初始化。
主要功能与优势
- 自动缓存与更新:避免不必要的数据请求,提高性能。
- 支持后台刷新:当页面处于后台时自动重新拉取最新数据。
- 请求去抖动与合并:防止短时间内重复发送相同请求。
- 易用的状态管理:通过 hooks 获取请求状态,无需手动维护 loading/error 状态。
- 内置分页、无限加载支持:方便实现复杂的数据展示需求。
- 集成 Devtools:便于调试查询状态和缓存情况。
基础使用示例
import { useQuery } from 'react-query';
function fetchUser(id) {
return fetch(`/api/user/${id}`).then(res => res.json());
}
function UserProfile({ userId }) {
const { data, error, isLoading } = useQuery(['user', userId], () => fetchUser(userId));
if (isLoading) return <span>Loading...</span>;
if (error) return <span>Error loading user data</span>;
return (
<div>
<h1>{data.name}</h1>
<p>{data.email}</p>
</div>
);
}