2017-10-07 11 views
0

私はいつも同じ数のアイテムを表示するように、改ページリスト内のアイテムを削除する方法を知っています。私の現在のアプローチは、(リストは、各削除した後、小さくなる)動作していない:Apolloのページ区切りリストから項目を削除する方法は?

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 }) 
    } 
    }) 
} 

答えて

1

あなたの応答は、ページ分割であるためには、クライアントは次のポストがどうあるべきかわかりません - それは、最初に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, 
     }, 
     }, 
    ], 
    }) 
} 

これは、それに応じて店舗や、あなたのUIを更新し、あなたのGET_PAGINATED_POSTSのための新しい結果を取得するためにアポロを強制します。

関連する問題