当前位置: 首页 > 知识库问答 >
问题:

Apollo客户端-从缓存读取

陆光济
2023-03-14

反应阿波罗客户端应用程序。我试图使用readQuery从缓存中读取数据,但无法读取缓存字段。

这里有一个纲要:

组件SinglePost调用useQuery,它执行我的GET_POST查询并缓存结果。GET_POST查询返回类型Post!。一切都很好,开发工具显示ROOT_QUERY包含一个名为getPost的字段和该帖子。

const { loading, data } = useQuery(GET_POST, {
    variables: {
      postID,
    }
});

SinglePost有一个子组件DeleteButton,它会在单击时删除评论。它调用useM0016并删除评论。DELETE_COMMENT查询返回类型Comment!

const [deleteComment] = useMutation(DELETE_COMMENT, {
    variables: {
      postID,
      commentID,
    },
});

Post有一个注释数组,现在我需要在缓存中更新它的数组并删除已删除的注释。我使用deleteComment突变中的update函数来获取缓存对象并使用readQuery从中获取getPost字段,但它返回null,即使它存在于开发工具中。

update(cache, result) {
  const cacheData = cache.readQuery({
    query: GET_POST,
  });
  // code that doesn't run because cacheData is null
}

我怀疑当通过返回Post类型的突变来突变帖子时,它成功地读取了getPost字段,但当突变查询返回Comment类型时,它无法在其突变挂钩中读取getPost...因为没有引用Post类型?

目前我使用refetchQueries作为解决方法。我不喜欢对服务器进行额外的调用,但我流畅的大脑就是无法解决这个问题。感谢任何帮助。

共有1个答案

江嘉悦
2023-03-14

哎呀,从来没有向查询传递过变量。

update(cache, result) {
  const cacheData = cache.readQuery({
    query: GET_POST,
    variables: {
      postID
    }
  });
}
 类似资料:
  • 我想知道以下问题的答案: 1)如果Ignite服务器重新启动,我需要重新启动客户端(web应用程序)。是否有任何方法可以在服务器重新启动时重新连接到服务器。我知道当服务器重新启动时,它分配了一个不同的ID,因此当前现有的连接变得过时。是否有方法克服这个问题,如果是的话,哪一个版本的Ignite支持这个功能。目前我使用1.7版本 3)如果我有一个大对象要缓存,我发现序列化和反序列化在Ignite中需

  • 问题内容: 我们有一个gwt-client,它从我们的服务器接收很多数据。从逻辑上讲,我想在客户端缓存数据,以免服务器收到不必要的请求。 截止到今天,我已经让我的模型来处理数据缓存,但伸缩性不是很好。这也成为一个问题,因为我们团队中的不同开发人员都开发了自己的“缓存”功能,从而使项目充满重复性。 我正在考虑如何实现一个“单入口”来处理所有缓存,而使模型对如何处理缓存一无所知。 有没有人在GWT中进

  • 我需要一些帮助来理解为什么在Eureka注册的服务会想要彼此通信,尽管没有实际运行。例如,我在尤里卡注册了服务A和服务B。如果我搞垮了服务B,那么即使服务A没有运行,它仍然会尝试与服务B进行30秒到3分钟的通信。这样做的目的是什么?有什么办法可以绕过它吗?谢谢你!

  • 我有一个例子,其中我有一个,它在graphql中定义了不同的实现。我可能无法共享确切的代码。但情况似乎是这样的: 有一个查询返回或类型作为响应。 响应可能包含以下内容: 或 我在客户端使用Apollo Client 3来查询数据,并有如下片段: 我查询的数据为: 由于这是的情况,正如Apollo client 3文档中所定义的,我们需要使用,以便在这种情况下匹配片段。出于缓存目的,我在Memory

  • 我想知道如何将缓存配置添加到Vertx http web客户端。 使用Apache http客户端,我可以轻松地设置setCacheConfig 有什么想法吗?

  • 我正在尝试通过 tcp 连接远程执行程序,我想在客户端之间实时共享标准输出和标准输出 我有以下没有错误处理的测试服务器:p我知道,目前我无法执行带有参数的程序,但这很容易处理:) 你看,我尝试与 c.Write() 共享标准输出,但这不起作用。 我认为cmd.Stdin的另一个问题将与Stdout的问题相同。此时我没有实现任何标准函数。 有人能给我一个关于这个函数的提示或示例代码吗?