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

Redux-Toolkit Query:子组件无法获取已加载查询数据问题

问题原因与解决方案

核心问题:缓存键不匹配

RTK Query 的查询缓存是基于传入的请求参数作为唯一缓存键存储的。你在组件A里调用getRates时传入的是完整的{ ...params, pollingInterval: 1000 }参数,但子组件B调用useLazyGetRatesQuery时传的是undefined,selector里的select()也没传对应参数——这就导致子组件用undefined作为缓存键找数据,而实际数据存在完整参数对应的缓存键下,自然拿不到数据。

解决方案

1. 子组件复用相同请求参数

把组件A调用getRates时用的参数传递给子组件(通过props或Context),子组件用这个参数匹配缓存:

// 子组件B接收props传递的params
const ChildComponentB = ({ ratesParams }) => {
  // 用相同params调用useLazyGetRatesQuery
  const [, { currentData, isLoading, data }] = useLazyGetRatesQuery(ratesParams, {
    selectFromResult: ({ data, error, isLoading }) => ({
      data,
      error,
      isLoading,
    }),
    pollingInterval: 1000,
  });

  // selector也要传入对应params
  const rRates = useSelector(state => 
    pollingRatesApi.endpoints.getRates.select(ratesParams)(state).data
  );
  console.log(rRates);
}

补充说明

useLazyGetRatesQuery的第一个参数是缓存匹配的核心——只有参数完全一致(浅比较),才能匹配到对应的缓存数据。哪怕参数只是少一个属性,都会被当成不同查询,无法找到之前的缓存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:46:04