【发布时间】:2023-04-04 01:08:01
【问题描述】:
我正在使用 @vue/apollo-composable 和 @graphql-codegen 开发一个 vue3 项目。
我的索引页面执行搜索查询。该查询的每个结果在页面上都有一个磁贴。我希望缓存会回答切片查询,但相反,它们总是会错过。
在页面级别我执行以下查询:
query getTokens($limit: Int!) {
tokens(limit: $limit) {
...tokenInfo
}
}
在我执行的 tile 组件内部:
query getToken($id: uuid!){
token(id: $id) {
...tokenInfo
}
}
片段如下所示:
fragment tokenInfo on token {
id
name
}
期望:缓存将处理 tile 组件内 100% 的查询。 (我希望避免将这些数据序列化到 vuex 的失败)。
现实:我收到 n+1 个后端调用。我尝试了一堆排列,包括摆脱片段。如果我使用fetchPolicy: 'cache-only' 发送getToken 调用,则不会返回任何数据。
apollo客户端配置非常基础:
const cache = new InMemoryCache();
const defaultClient = new ApolloClient({
uri: 'http://localhost:8080/v1/graphql',
cache: cache,
connectToDevTools: true,
});
const app = createApp(App)
.use(Store, StateKey)
.use(router)
.provide(DefaultApolloClient, defaultClient);
我还附上了我的 apollo 开发工具的屏幕截图。看起来缓存实际上正在填充标准化数据:
任何帮助将不胜感激! :)
【问题讨论】:
-
不同的条目 -
tokens(....)vstoken(...)- 不同的查询,没有命中(缓存如何知道查询的token(...)应该被“解析”/识别为片段/某种类型?API 可以返回任何内容对于该查询)...但您可以通过 ids 读取规范化的缓存条目/feagments
标签: graphql apollo-client vuejs3 vue-apollo apollo-cache-inmemory