1

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

const GET_PAGINATED_POSTS = gql`
  query postsBySize($page: Int!, $pageSize: Int!) {
    postsPage(page: $page, size: $pageSize) {
      _id
      title
    }
  }
`;

deletePost() {
  this.$apollo.mutate({
    mutation: DELETE_POST,
    variables: {
      postId: this.post._id,
      commentIds: this.post.comments.map(x => x._id)
    },
    update: (cache, { data: { deletePost } }) => {
      const query = {
        query: GET_PAGINATED_POSTS,
        variables: {
          page: 0,
          pageSize: 10
        },
      };

      const data = cache.readQuery({ ...query });
      data.postsPage = data.postsPage.filter(post => post._id != this.post._id)
      cache.writeQuery({ ...query, data })
    }
  })
}
4

1 回答 1

0

由于您的响应是分页的,因此客户不知道下一个帖子应该是什么——它通过初始查询获取了 10 个帖子,所以这就是您商店中的内容。

而不是通过使用手动更新缓存update,您应该使用refetchQueries

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 为您的 获取新结果GET_PAGINATED_POSTS,并相应地更新商店和您的 UI。

于 2017-10-08T00:58:53.723 回答