因此,我正在开发一个项目的功能,该功能允许用户查看基于不同变量的数据,例如,特定于年份、位置、性别等的数据。
下面是我写的代码:
this._querySubscription = this._apollo.watchQuery({
query: *some graphql query*,
variables: {
// this is where the variables are dump
}
})
.valueChanges
.subscribe(( { data, loading } ) => {
do something with the data
})
现在,不要担心函数和东西的错误,因为我已经做对了。我什至有下面的代码来处理缓存甚至驱逐。
let cache = this._apollo.client.cache as InMemoryCache
let data = this._apollo.client.cache.readQuery({
query: *some graphql query*,
variables: { *using the same variables as the writeQuery, of course*}
})
cache.evict({
fieldName: "*the fieldname from the query*",
broadcast: false,
});
this._apollo.client.cache
.writeQuery({
query: *some graphql query which is the same as above*,
data,
variables: {
*again, same variables*
}
})
我遇到的一些事情是:
- 如果不使用
readQuery
andwriteQuery
,当watchQuery
再次运行时,即使使用不同的变量来运行查询,也会从缓存中返回相同的数据。 - 使用
readQuery
,writeQuery
,evict
并使用不同的变量运行第二个查询不会从缓存中返回相同的数据(我正在寻找)但是,如果我尝试运行第一个查询,数据返回将为空,可能是因为我修改缓存。3.如果您在运行查询时考虑使用fetchPolicy
,我已经尝试了所有 4fetchPolicy
, 等等。如果我使用它可以工作,cache-first
但不知何故我不知道如何等待它完全完成发出请求并在我之前更新缓存可以更新我的用户界面。network-only
cache-network-only