问题标签 [apollo-cache-inmemory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 如何在 NextJs 中的页面转换之间使用相同的 Apollo 缓存?
我有来自 NextJS 官方示例 repo 的以下 apolloClient.js 文件:
我有两个页面:page1.js 使用 Apollo 钩子 (useQuery()) 和第二个页面 page2.js,它什么都不做,只返回 null。问题是,如果我使用 Chrome 扩展程序检查 Apollo 缓存,则 page1 上的查询的缓存结果不会出现在 page2 上。
如何仅使用 1 个全局缓存并防止在页面转换之间重新初始化缓存?
jestjs - Apollo 缓存忽略字段别名作为键(MockedProvider)
我看到 ApolloProvider 和 MockedProvider 之间的行为存在一些差异,并且在测试中引发了错误。
假设我有以下查询:
在 ApolloProvider 中,此查询使用字段别名作为键在 Apollo 缓存中创建条目,缓存中的每个条目Author
都有一个id
. 因此,Apollo 可以自动合并实体。
使用 MockedProvider 时,情况并非如此。当我模拟以下响应时:
我收到以下错误:
因此,ApolloProvider 中完全相同的查询使用id
(字段别名)作为键,而在 MockedProvider 中它只是添加authorID
为另一个字段条目。它忽略字段别名并且没有键。
显然,现在没有任何东西能够合并。我的第一个猜测是,这是因为 MockedProvider 无权访问架构,所以它不知道 authorID 是 ID 类型?还是我走远了?
对我来说真的很奇怪的一件事是 mymockResponse
甚至没有提供authorID
. 我的 mockResponse 是 { id: "test!!" } 但缓存显示了一个条目{"authorID":"test!!"}
,因此它本身以某种方式“无别名”。
我真的很难理解这里发生了什么。任何洞察力都将非常有用。
reactjs - 使用 apollo graphql hook useQuery 时超出最大调用堆栈大小
我正在使用 useQuery 挂钩来调用 grahql 查询,但收到此错误 - /
我正在使用获取策略 cahce-first 从 cahce 加载数据(如果可用)。
如果我刷新页面它工作正常。我认为这与缓存有关。但我已经在使用最新版本的 apollo-cache-inmemory。
caching - 利用 Apollo 缓存
在升级到 Apollo 客户端 3.3 时,我们决定启用缓存以减少网络流量并节省计算能力。我们试图实现这样的东西:
但是,在 Apollo 中实现的缓存不适合我们的数据结构,因此我们收到不正确的结果。
首先,我们使用过滤器 a 查询报告。我们在缓存中没有该查询的任何数据,因此我们点击后端并接收
在缓存中 apollo 自动存储:
然后我们使用过滤器 b 查询报告。我们再次在缓存中没有该查询的数据,然后点击后端并接收
在缓存中我们更新
当我们再次查询过滤器 a 的报告时,将访问缓存,因为已经存在一个查询:
然后解决对 VegaSpecification 的引用 - 返回
因此,我们为过滤器 a 返回了不正确的数据。我们使用“useMemo”来重新计算记忆值。
我们如何构造我们的实体,以便对于具有不同查询变量的不同查询,我们收到可以通过 id 区分的结果
apollo - Apollo 轮询查询覆盖缓存
我在使用 InMemoryCache 时遇到了一些问题,我一直想知道 apollo 究竟如何处理分配了 pollInterval 的查询。比如说,一个查询有一个 pollInterval 并且有默认的缓存策略。查询服务器,已获取新旧数据的混合作为响应,因此应修改缓存以包含新数据,没有类型策略。当在数据库中找到新数据时,我的轮询 useQuery 正在覆盖缓存字段(数据仍在缓存中,只是不再分配给该字段)所以我一直试图弄清楚 apollo 究竟是如何做这些事情的场景,我无法弄清楚查询与缓存的交互方式。
tldr 当轮询的 useQuery 获取新数据时,缓存字段会发生什么情况?
react-native - Apollo 缓存查询字段策略 offsetLimitPagination() 不适用于订阅
我使用 apollo 客户端进行原生反应。
当我使用 offsetLimitPagination() 进行分页时,我的订阅不会更新缓存。
订阅可以正常工作,但不会更新平面列表数据。当我删除 offsetLimitPagination 函数时,它可以工作。我不能在缓存上同时使用订阅和 offsetLimitPagination 函数。
有什么解决办法吗?
谢谢。
缓存
聊天详情页
reactjs - WriteQuery 未将对象写入 apollo 缓存
我正在尝试将 Apollo Cache 专门用于本地状态管理。我正在使用 Apollo Client 3。我正在尝试使用缓存中的 writeQuery 写入默认状态(一个简单对象),但它没有写入缓存中。我在这里找不到我缺少的东西。
和
我检查了我们不需要 typeDefs 来读取和写入缓存,只要我们不想在 apollo 开发工具中进行自省。因此我初始化了一个简单的客户端
并使用它提供给我的组件ApolloProvider
尽管运行了执行 client.writeQuery 的代码,但我在 Apollo 缓存中看不到任何内容,并且预期,运行 useQuery 的组件之一也返回未定义的数据。我错过了什么?
react-native - ApolloClient 缓存不会存储每个项目
我对 ApolloClient 缓存有疑问。有一些项目未存储在缓存中。
环境:反应原生
套餐:
- @apollo/客户
- @react-native-async-storage/async-storage
- apollo3-cache-persist
结果(没有缓存):
结果(使用缓存:策略:缓存优先)
我不认为这是规范化的问题,因为元素具有id
and __typename
。我也尝试使用keyFields: false
for禁用规范化,Stage
但这不起作用。
如果我没有提供足够的信息,请告诉我。谢谢您的帮助!
apollo-client - 覆盖 Apollo 内存缓存中的 id
在基于 Apollo 的 Web 应用程序中,用户可以使用服务器 api 更改实体的标识符(即 graphql defs 中的“id”标识符)。
在该操作的那一刻,当前的 Apollo in-memory-cache 已经包含许多关于在许多上下文中更新 id-entity 的引用:
- 主缓存实体引用(位于 的根目录
cache.data.data
) - 不同其他实体中的各种引用(通过
__ref
字段)
所有这些引用都会停止,以及任何涉及更新实体 ID 的查询监视
查询监视问题可以应用程序解决。
关于缓存,我没有找到这个用例的任何内置功能,
所以我想知道我是否可以手动管理它。
我会手动修改cache.data.data
对象:
- 克隆顶级实体,将顶级道具名称相应地重命名为新 id
- 删除原来的
- 扫描整个缓存 obj
__ref
并相应地更改值
这种方法有什么问题吗?
我错过了什么吗?
未来的 lib 升级有多大可能改变刹车?
有更清洁的方法吗?