我将
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 选项卡时,我在缓存部分看不到任何内容。
我的问题:
useQuery
中的 @apollo/client
,为什么结果没有缓存?const { loading, error, data } = useQuery(USERS_QUERY)
我认为结果应该自动缓存。
我还尝试添加类型策略:
cache: new InMemoryCache({
typePolicies: {
Users: {
keyFields: ['id']
}
}
})
但我认为如果我想用不同的键规范化缓存,或者如果我想自己决定如何合并新数据,我会使用它。但首先我需要将数据放入缓存中
据我所知,这是因为您的查询没有任何输入参数/变量,因此当再次调用查询时,缓存不知道从缓存中获取哪个项目。据我了解,缓存仅在使用ID查找特定数据时使用;否则,如果它是通用查询,数据可能已更改,因此不会被缓存。