无法在 GraphQL Apollo Client 中读取正确的查询
2019-06-07
1129
在我的应用程序的其中一个页面上,我正在使用 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"
}
}.
我相信这是因为菜单数据尚未存在。
我怎样才能等到它出现?
1个回答
您说得对。您收到错误是因为数据尚未缓存:
The query method, on the other hand, may send a request to your server if the appropriate data is not in your cache whereas readQuery will throw an error if the data is not in your cache. readQuery will always read from the cache.
https://www.apollographql.com/docs/react/advanced/caching/#readquery
要执行您想要的操作,请使用带有
cache-only
fetchPolicy
的普通查询。
https://www.apollographql.com/docs/react/api/react-apollo/#optionsfetchpolicy
Johnny Zabala
2019-06-07