【发布时间】:2018-02-21 10:43:20
【问题描述】:
假设我有一个表格,它使用如下查询列出了一堆帖子:
const PostsQuery = gql`
query posts($name: string) {
posts {
id
name
status
}
}
`;
const query = apolloClient.watchQuery({query: PostsQuery});
query.subscribe({
next: (posts) => console.log(posts) // [ {name: "Post 1", id: '1', status: 'pending' }, { name: "Paul's Post", id: '2', status: 'pending'} ]
});
然后我的用户出现并在搜索字段中输入一个值并调用此代码:
query.setVariables({name: 'Paul'})
它会提取过滤后的帖子并将其正常注销。
// [ { name: "Paul's Post", id: '2', status: 'pending'} ]
现在,在我的表格中有一个按钮,可以将帖子的状态从“待处理”更改为“活动”。用户点击它,它会调用如下代码:
const PostsMutation = gql`
mutation activatePost($id: ID!) {
activatePost(id: $id) {
ok
object {
id
name
status
}
}
}
`;
apolloClient.mutate({mutation: PostsMutation});
突变一切正常,但现在我想重新获取表数据以使其具有最新的数据,因此我进行了更改:
apolloClient.mutate({
mutation: PostsMutation,
refetchQueries: [{query: PostsQuery, variables: {name: 'Paul'}]
});
万岁,成功了!
// [ { name: "Paul's Post", id: '2', status: 'active'} ]
但是...现在我的用户清除了搜索查询,期待结果更新。
query.setVariables({});
// [ {name: "Post 1", id: '1', status: 'pending' }, { name: "Paul's Post", id: '2', status: 'pending'} ]
哦不!因为在我们的突变中没有使用我们的“原始”变量(意味着没有)重新获取数据,所以我们得到的是陈旧的数据!
那么,如果您的突变可能会影响可能具有多种变量排列的查询,您该如何处理?
【问题讨论】:
-
您没有得到答案的可能原因有两个:您的问题太长以及您使用了排列一词。
标签: apollo