代码之家  ›  专栏  ›  技术社区  ›  james emanon

为什么我不能使用QueryCache从queryClient获取“缓存”。预取查询

  •  0
  • james emanon  · 技术社区  · 5 年前

    所以,我试图访问我设置的缓存:queryClient。预回迁查询,在SSR页面中。

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

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

    //这是包装我的_应用程序。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'))
    

    请注意,我在工具中“看到”了数据/缓存,所以为什么我不能获取它? enter image description here

    0 回复  |  直到 5 年前
        1
  •  1
  •   TkDodo    5 年前

    因为你创造了一个 new Cache ,并且该缓存与queryClient没有连接。如果要获取缓存,可以通过以下方式进行:

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

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