我使用grapqhl-codegen将查询转换为可注入服务,所有工作都像一个魅力,此外,我不再可以进行updateQuerys了,因为我只有服务并且无法将服务传递到updatesQuerys数组中。我希望userGql服务重新获取数据,而不使用缓存:
loginAttempt() {
const data = this.loginForm.value;
this.loginGql
.mutate({ data }, {updateQueries: [CANT ADD SERVICE HERE]})
.pipe(
pluck("data", "login"),
switchMap(async (token: string) => {
await this.storage.setToken(token);
return this.userGql.fetch().toPromise();
})
)
.subscribe((res) => console.log("res: ", res));
}```
答案 0 :(得分:0)
如果您希望在突变后重新获取查询,则需要使用refetcQueries
。 updateQueries
用于手动更新缓存(也已弃用,请参见update
),这样它就无法满足您的需求。
我知道至少有两种使用refetchQueries
的方式。
一种是按查询名称命名的,当监视有问题的查询时,该名称将起作用:
this.loginGql
.mutate({ data }, { refetchQueries: ["UserQuery"] }) // <-- this
.pipe(
pluck("data", "login")
)
.subscribe((token: string) => {
this.storage.setToken(token);
// ... no need to manually fetch the query here
})
另一个选择是参考服务文档。我相信这将强制获取查询。
this.loginGql
.mutate(
{
data
},
{
refetchQueries: {
query: this.faqQuestionsQuery.document // <-- this
}
}
)
.pipe(
pluck("data", "login")
)
.subscribe((token: string) => {
this.storage.setToken(token);
// ... no need to manually fetch the query here
})
不要忘记变量在这里也很重要。