Apollo 客户端 v3 不使用 useQuery 缓存查询结果

问题描述 投票:0回答:1

我将

apollo v3
create-react app
一起使用。我使用
useQuery
发起查询并期望结果被缓存,但事实并非如此。

在我的

App.jsx
中,我有:

const client = new ApolloClient({
    uri: `${api}/graphql`,
    cache: new InMemoryCache()
  })

我用

ApolloProvider
包装我的应用程序。

我有一个提供者使用此

graphql
查询来获取用户列表:

const USERS_QUERY = gql`
  query GetUsers {
    users {
      id
      email
      fullName
    }
  }
`

查询有效,当我检查 chrome devtools 中的 apollo 选项卡时,我在缓存部分看不到任何内容。

我的问题:

  1. 如果我使用
    useQuery
    中的
    @apollo/client
    ,为什么结果没有缓存?

const { loading, error, data } = useQuery(USERS_QUERY)

我认为结果应该自动缓存。

  1. 我还尝试添加类型策略:

    cache: new InMemoryCache({
       typePolicies: {
         Users: {
           keyFields: ['id']
         }
       }
     })
    

但我认为如果我想用不同的键规范化缓存,或者如果我想自己决定如何合并新数据,我会使用它。但首先我需要将数据放入缓存中

reactjs graphql apollo-client react-apollo
1个回答
2
投票

据我所知,这是因为您的查询没有任何输入参数/变量,因此当再次调用查询时,缓存不知道从缓存中获取哪个项目。据我了解,缓存仅在使用ID查找特定数据时使用;否则,如果它是通用查询,数据可能已更改,因此不会被缓存。

© www.soinside.com 2019 - 2024. All rights reserved.