1

在我的应用程序的一个页面上,我正在使用 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"
  }
}.

我相信这是因为菜单数据还没有。

我怎么能等到它出现呢?

4

1 回答 1

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

于 2019-06-07T12:36:53.457 回答