You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从react-query缓存中获取指定数量的查询结果?

React Query 缓存数据截取方案

React Query没有专门的内置方法直接从缓存中提取指定数量的数据,但可以通过useQuery的select选项优雅实现你的需求,同时完全保留原始缓存的完整性。

核心实现:使用select转换查询结果

select是useQuery的内置配置项,允许你对查询返回的完整数据进行按需转换,返回组件需要的子集。原始的完整数据会始终存在于缓存中,其他组件调用同一queryKey时仍能获取全部内容。

示例代码:

// 组件1:获取并缓存完整博客文章列表
useQuery({
  queryKey: ['blogPosts'],
  queryFn: () => fetch('/api/blog-posts').then(res => res.json()),
});

// 组件2:仅展示最新3条,不影响原始缓存
const { data: latestPosts } = useQuery({
  queryKey: ['blogPosts'],
  queryFn: () => fetch('/api/blog-posts').then(res => res.json()),
  // 截取最后3条并倒序,确保最新的文章排在前面
  select: (fullPosts) => fullPosts.slice(-3).reverse()
});

优势说明

  • 自动同步更新:当缓存中的完整文章列表发生变化(比如重新拉取数据、后台更新),select会自动重新计算子集,组件2的数据会自动刷新,无需手动处理。
  • 缓存复用:所有使用['blogPosts']作为查询键的组件共享同一缓存,避免重复请求,同时各组件可按需转换数据格式或子集。

复用逻辑优化

如果多个组件都需要“获取最新3条”的逻辑,可以将转换函数抽离复用:

// 抽离公共转换函数
const extractLatestPosts = (fullPosts) => fullPosts.slice(-3).reverse();

// 在组件中复用
const { data: latestPosts } = useQuery({
  queryKey: ['blogPosts'],
  queryFn: fetchAllBlogPosts,
  select: extractLatestPosts
});

内容的提问来源于stack exchange,提问作者Mitchell Blankenship

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 11:30:55