Pagination 如何在Apollo中从分页列表中删除项目?

Pagination 如何在Apollo中从分页列表中删除项目?,pagination,graphql,apollo,vue-apollo,Pagination,Graphql,Apollo,Vue Apollo,我想知道如何删除分页列表中的项目,以便始终显示相同数量的项目。我当前的方法不起作用(每次删除后列表会变小): 因为您的响应是分页的,所以客户机不知道下一篇文章应该是什么——它用初始查询获取了10篇文章,这就是存储中的内容 您不应使用update手动更新缓存,而应使用refetchquerys: deletePost() { this.$apollo.mutate({ mutation: DELETE_POST, variables: { postId: this.

我想知道如何删除分页列表中的项目,以便始终显示相同数量的项目。我当前的方法不起作用(每次删除后列表会变小):


因为您的响应是分页的,所以客户机不知道下一篇文章应该是什么——它用初始查询获取了10篇文章,这就是存储中的内容

您不应使用
update
手动更新缓存,而应使用
refetchquerys

deletePost() {
  this.$apollo.mutate({
    mutation: DELETE_POST,
    variables: {
      postId: this.post._id,
      commentIds: this.post.comments.map(x => x._id)
    },
    refetchQueries: [
      {
        query: GET_PAGINATED_POSTS,
        variables: {
          page: 0,
          pageSize: 10,
        },
      },
    ],
  })
}

这将迫使Apollo为您的
获取分页的帖子获取新结果,并相应地更新存储和您的UI。

由于您的回复已分页,客户端不知道下一篇帖子应该是什么——它获取了10篇带有初始查询的帖子,这就是您存储中的内容

您不应使用
update
手动更新缓存,而应使用
refetchquerys

deletePost() {
  this.$apollo.mutate({
    mutation: DELETE_POST,
    variables: {
      postId: this.post._id,
      commentIds: this.post.comments.map(x => x._id)
    },
    refetchQueries: [
      {
        query: GET_PAGINATED_POSTS,
        variables: {
          page: 0,
          pageSize: 10,
        },
      },
    ],
  })
}

这将迫使Apollo为您的
获取分页帖子获取新结果,并相应地更新存储和您的UI。

这可能是唯一可行的方法,但对我来说,这似乎是极不理想的。。。如果仅仅因为像
optimisticResponse
这样的东西不能使用,服务器必须被不必要的攻击,而且一切都很慢。。。肯定有办法直接更新缓存并删除删除的对象。我们可以举一个使用
游标进行分页的例子吗。例如,如果我们使用的是类似gmail的应用程序,我们在第3页。如果我们从列表中删除任何项目,我们需要重新提取该特定列表的数据。在基于光标的分页中,我们发送光标、before/after和last/first参数。在类似gmail的应用程序中。我们在第三页,我们删除任何电子邮件。我们需要重新蚀刻第三页的数据。所以我们需要先发送游标,然后发送。当我们在第三页时,我们只有第三页的游标。所以,如果我们发送顶部项目的光标。它将从后端排除。因为查询假设在游标之后返回数据。另一种情况是,如果我们在最后一页只有一条记录。如果我们删除该记录页,则应切换到具有新计数和页码的倒数第二页。这可能是唯一可行的方法,但对我来说,这似乎极不理想。。。如果仅仅因为像
optimisticResponse
这样的东西不能使用,服务器必须被不必要的攻击,而且一切都很慢。。。肯定有办法直接更新缓存并删除删除的对象。我们可以举一个使用
游标进行分页的例子吗。例如,如果我们使用的是类似gmail的应用程序,我们在第3页。如果我们从列表中删除任何项目,我们需要重新提取该特定列表的数据。在基于光标的分页中,我们发送光标、before/after和last/first参数。在类似gmail的应用程序中。我们在第三页,我们删除任何电子邮件。我们需要重新蚀刻第三页的数据。所以我们需要先发送游标,然后发送。当我们在第三页时,我们只有第三页的游标。所以,如果我们发送顶部项目的光标。它将从后端排除。因为查询假设在游标之后返回数据。另一种情况是,如果我们在最后一页只有一条记录。如果我们删除该记录页面,则应切换到具有新计数和页码的倒数第二页。