2017-10-07 5 views
0

페이지 매김 목록의 항목을 삭제하여 항상 동일한 수의 항목을 표시하는 방법을 궁금합니다. 나의 현재의 접근 방식 (목록은 각 삭제 한 후 작아진다) 작동하지 않습니다 :아폴로에서 페이지가 매겨진 목록에서 항목을 삭제하는 방법은 무엇입니까?

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에 대한 새로운 결과를 가져 아폴로를 강제한다.