我想直接通过fetchPolicy'cache-and-network'将apollo缓存与apollo-client api结合使用。似乎我们必须使用watchQuery api而不是查询,但不幸的是我无法使其正常工作。
所以你们能给我一些示例代码来使用'watchQuery'来获取数据,就像我们从'query'中得到的一样:加载,数据,networkStatus ...?
client.query({
query: Query.getUserById,
fetchPolicy: 'cache-and-network',
variables: { userId }
}).then(data => {
console.log(data.loading, data.getUserById)
})
答案 0 :(得分:2)
答案 1 :(得分:0)
2021 年:
如果您使用的是 react,useQuery()
钩子已经在遵循 watchQuery
而不是 query
的行为。所以你可以这样做:
const { loading, error, data, refetch } = useQuery(query, {
fetchPolicy: "cache-and-network"
});
或者在创建 apollo 客户端时设置为 defaultOptions:
import {
ApolloClient,
InMemoryCache,
HttpLink,
DefaultOptions
} from "@apollo/client";
const defaultOptions: DefaultOptions = {
watchQuery: {
fetchPolicy: "cache-and-network",
errorPolicy: "ignore",
notifyOnNetworkStatusChange: true
}
};
export const platformClient = new ApolloClient({
link: new HttpLink({
uri: "https://xxxxx",
credentials: "same-origin"
}),
cache: new InMemoryCache(),
defaultOptions
});
关于为什么 cache-and-network
不允许用于 query
的一些解释。
原因在 2019 年已在此处解释:
https://github.com/apollographql/apollo-client/issues/3130#issuecomment-478409066
基本上,query()
的行为/逻辑不支持这种获取策略。因此,他们在打字级别阻止了它。