在GraphQL Apollo客户端中无法读取正确的查询

时间:2019-06-07 11:49:23

标签: reactjs graphql react-apollo react-apollo-hooks

在我应用程序的页面之一上,我正在使用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 个答案:

答案 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