有三种 Apollo-ey 方法可以做到这一点。首先,您可以重新获取列表查询,现在应该包含您的新项目:
this.$apollo.mutate({
mutation: MY_LIST_CREATE_MUTATION,
variables: {
name: this.name
},
refetchQueries: [
{
query: MY_LISTS_QUERY
}
],
awaitRefetchQueries: true
})
或者,您可以根据突变的结果直接更新缓存:
this.$apollo.mutate({
mutation: MY_LIST_CREATE_MUTATION,
variables: {
name: this.name
},
update: (store, { data: { listCreate } }) => {
const data = store.readQuery({ query: Lists });
data.lists = [ ...lists, listCreate];
store.writeQuery({ query: Lists, data });
}
})
或者最后一种方法是您可以简单地告诉您的列表页面在您使用该选项浏览到该页面时始终重新获取,以便它始终拥有新数据:fetchPolicy
apollo: {
lists: {
query: MY_LISTS_QUERY,
fetchPolicy: 'network-only'
}
}
就个人而言,我总是选择最终的选择。当我的应用程序变得更加复杂时,如果有多个页面我正在加载列表怎么办。假设有一个主索引,但每个用户都有一个他们创建的列表的特定列表,或者其他什么。然后您需要返回并更新您LIST_CREATE_MUTATION
的帐户以解决所有这些新查询。
注意:我上面链接的文档是 React 和 Angular Apollo 文档的混合。我发现 Vue Apollo 文档在解释选项方面并不总是像fetchPolicy
其他refetchQueries
Apollo 框架的文档一样好。一般来说,我发现这些选项在框架之间是可以互换的。