为什么我不能使用 QueryCache 从 queryClient.prefetchQuery 获取 "cache"

Why can't I use QueryCache to get at "cache" from queryClient.prefetchQuery

因此,我正在尝试访问我在 SSR 页面中设置的缓存:queryClient.prefetchQuery。

我在水合的SSR端使用这个:

ala:
  await queryClient.prefetchQuery(['userSesion'], () => fetchUserSession());

// 这是包装我的 _app.js 文件

  <QueryClientProvider client={queryClient}>
    <Hydrate state={props.dehydratedState}>

然后在客户端,我试图获取这个“缓存”。

  const queryCache = new QueryCache();
  queryCache.find("userSession"); // <--- This is undefined/empty

也尝试过:没有运气

  queryClient.getQueryData('userSession'))
  queryClient.getQueryState('userSession'))

请注意,我在工具中“看到”了 data/cache,为什么我看不到它?

因为您创建了一个 new Cache,并且该缓存没有连接到 queryClient。如果你想获取缓存,你可以通过:

const queryClient = useQueryClient()
const queryCache = queryClient.getQueryCache()

话虽如此,应该很少需要直接与 QueryCache 互动。 QueryClient 公开了与缓存交互的函数,如果您有一个组件需要缓存中的数据,那么最好只在该组件中调用 useQuery。如果有数据,它将立即从缓存中为您提供数据,如果数据被认为是陈旧的,它将执行后台重新获取。