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

如何在另一个视图中复用RTK Query已缓存的数据?

如何从Redux Store读取RTK Query缓存的Clients数据

方法一:直接复用useGetClientsQuery Hook(最简单)

RTK Query默认会对相同查询参数的请求做缓存复用,只要你在另一个组件里传入相同的username参数调用useGetClientsQuery,它会直接读取缓存数据,不会发起新的API请求:

// 目标视图组件
import { useGetClientsQuery } from './path/to/tradesApi';

export const AnotherView = () => {
  // 传入相同参数"x@x.com",直接读取缓存
  const { data: clients, isLoading } = useGetClientsQuery("x@x.com");

  if (isLoading) return <div>加载中...</div>;
  if (!clients) return <div>暂无数据</div>;

  return (
    <div>
      {clients.map(client => (
        <div key={client.id}>{client.name}</div>
      ))}
    </div>
  );
};

方法二:使用RTK Query选择器手动读取缓存

如果你需要在组件外(比如Redux中间件、Thunk)或者更直接地访问Store中的缓存数据,可以用RTK Query生成的专属选择器:

// 目标视图组件
import { useSelector } from 'react-redux';
import { tradesApi } from './path/to/tradesApi';

export const AnotherView = () => {
  // 用select方法生成选择器,传入查询参数"x@x.com"定位缓存条目
  const clientCache = useSelector(tradesApi.endpoints.getClients.select("x@x.com"));

  if (!clientCache.data) return <div>暂无数据</div>;

  return (
    <div>
      {clientCache.data.map(client => (
        <div key={client.id}>{client.name}</div>
      ))}
    </div>
  );
};

补充说明

  • RTK Query的缓存Key由「Endpoint名称 + 查询参数」共同决定,只要参数完全匹配,就能命中对应的缓存条目。
  • 若不需要刷新数据,不要给useGetClientsQuery添加refetchOnMountOrArgChange这类强制刷新的选项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:31:18