Apollo Client - 从缓存中读取

Apollo Client - reading from cache

React + Apollo 客户端应用程序。我正在尝试使用 readQuery 从我的缓存中读取,但无法读取缓存字段。

这是一个概要:

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

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

SinglePost 有一个子组件 DeleteButton,可在点击时删除评论。它调用 useMutation 并删除评论。 DELETE_COMMENT 查询 returns 类型 Comment!.

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

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

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

我怀疑当通过 return 一个 Post 类型的突变来改变 posts 时,它成功地读取了 getPost字段,但是当突变查询 return 一个 Comment 类型时,它无法在其突变挂钩中读取 getPost...因为没有参考到 Post 类型?

目前我使用 refetchQueries 作为解决方法。我不喜欢对服务器进行额外的调用,但我灵敏的大脑就是想不通。感谢任何帮助。

糟糕,没有变量被传递给查询。

update(cache, result) {
  const cacheData = cache.readQuery({
    query: GET_POST,
    variables: {
      postID
    }
  });
}