Next.js 为什么可以';我用QueryCache获取;“缓存”;来自queryClient.prefetchQuery

Next.js 为什么可以';我用QueryCache获取;“缓存”;来自queryClient.prefetchQuery,next.js,react-query,Next.js,React Query,因此,我试图访问我在SSR页面中设置的缓存:queryClient.prefetchQuery 我在SSR方面使用这个,我认为: ala: await queryClient.prefetchQuery(['userSesion'], () => fetchUserSession()); //这是包装我的app.js文件 <QueryClientProvider client={queryClient}> <Hydrate state={props.de

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

我在SSR方面使用这个,我认为:

ala:
  await queryClient.prefetchQuery(['userSesion'], () => fetchUserSession());
//这是包装我的app.js文件

  <QueryClientProvider client={queryClient}>
    <Hydrate state={props.dehydratedState}>
请注意,我在工具中“看到”了数据/缓存,为什么我不能获取它?

因为您创建了一个
新缓存,而该缓存与queryClient没有连接。如果要获取缓存,可以通过以下方式进行:

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

也就是说,应该很少需要直接与
QueryCache
交互。
QueryClient
公开与缓存交互的函数,如果您有一个组件需要缓存中的数据,则最好只在该组件中调用
useQuery
。如果有数据,它会立即从缓存中提供数据,如果数据被认为过时,它会执行后台重新蚀刻。

是的,这很有效。我刚刚使用了:queryClient.getQueryData('session'),非常感谢。这是反模式吗?我只需要显示用户的“名称”。。并且需要从缓存中读取,从SSR实现中的设置中获取。它不会像useQuery那样创建订阅,因此如果缓存中的名称更改,则组件不会更新。改为使用查询,并设置一个staleTime以避免您不想要的后台更新。我不喜欢“useQuery”的一点是,我在“函数”中有标记,如果有一种机制不传递第二个“method”参数,它会将缓存交回。因为在这个例子中,我不想“重新蚀刻”如果它不在那里。。。因为我在SSR里有。我只想“得到缓存”。
  queryClient.getQueryData('userSession'))
  queryClient.getQueryState('userSession'))
const queryClient = useQueryClient()
const queryCache = queryClient.getQueryCache()