0

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

这是一个纲要:

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

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

SinglePost有一个DeleteButton删除点击评论的子组件。它调用useMutation和删除评论。DELETE_COMMENT查询返回类型Comment!

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

Post 有一个评论数组,现在我需要在缓存中更新它的数组并删除已删除的评论。我使用突变中的update函数deleteComment来获取缓存对象并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作为一种解决方法。我不喜欢对服务器进行额外的调用,但我光滑的大脑无法弄清楚这一点。任何帮助表示赞赏。

4

1 回答 1

0

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

update(cache, result) {
  const cacheData = cache.readQuery({
    query: GET_POST,
    variables: {
      postID
    }
  });
}
于 2021-03-06T16:44:17.380 回答