在我应用程序的页面之一上,我正在使用graphql apollo客户端进行两个api调用。一个是document
,另一个是menu
。我需要在其中一个组件中添加菜单数据,因此我想使用readQuery
以避免再次获取它。我正在做的是:
const client = useApolloClient();
try {
const testData = client.readQuery({
query: gql`
query ($result: String) {
menu(result: $result) {
text
}
}
`,
variables: {
result: „testresult”
},
});
console.log(testData);
} catch(e) {
console.log(e);
}
graphQL在做什么,正在寻找document
根查询,因此错误看起来像这样:
Invariant Violation: Can't find field menu({"lang":"en-us"}) on object
{
"document({\"lanf\":\"en-us\",\"id\":\"mySite\"})": {
"type": "id",
"generated": false,
"id": "XO5tyxAAALGzcYGG",
"typename": "Document"
}
}.
我相信这是因为菜单数据尚不存在。
我如何才能等到它在那里?
答案 0 :(得分:1)
你是对的。您收到错误消息,因为数据尚未缓存:
另一方面,如果适当的数据不在缓存中,则查询方法可以向服务器发送请求,而如果数据不在缓存中,则readQuery会引发错误。 readQuery将始终从缓存中读取。
https://www.apollographql.com/docs/react/advanced/caching/#readquery
要执行所需的操作,请对cache-only
fetchPolicy
使用普通查询。
https://www.apollographql.com/docs/react/api/react-apollo/#optionsfetchpolicy