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

Reactjs 无法在GraphQL Apollo客户端中读取正确的查询,reactjs,graphql,react-apollo,react-apollo-hooks,Reactjs,Graphql,React Apollo,React Apollo Hooks,在我应用程序中的一个页面上,我正在使用graphql apollo客户端进行两个api调用。一个是文档,另一个是菜单。我的一个组件中需要菜单数据,因此我想使用readQuery,以免再次获取它。我正在做的是: const client = useApolloClient(); try { const testData = client.readQuery({ query: gql` query ($result: String) { menu(result: $resul

在我应用程序中的一个页面上,我正在使用graphql apollo客户端进行两个api调用。一个是
文档
,另一个是
菜单
。我的一个组件中需要菜单数据,因此我想使用
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正在查找
文档
根查询,因此错误如下所示:

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"
  }
}.
我认为这是因为菜单数据还不存在。


我怎么能等到它出现呢?

你说得对。由于数据尚未在缓存中,因此出现错误:

另一方面,如果适当的数据不在缓存中,查询方法可能会向服务器发送请求,而如果数据不在缓存中,readQuery将抛出错误。readQuery将始终从缓存中读取

要执行所需操作,请使用仅带
缓存的普通查询
fetchPolicy

但这不也会带来错误吗?来自文档:如果您查询的数据不存在于缓存中,那么将抛出一个错误,因此我想
首先缓存
在这里更合适。谢谢你的帮助,让我们走上正轨。不,它不会出错。使用useQuery时,如果没有数据,则仅此而已。您必须在ui中处理无数据的情况。
fetchPolicy
cache first
是默认行为。阿波罗将查看缓存,如果没有数据,它将发出请求。否则就不行了。因此,要先使用
缓存
,只需像平常一样使用useQuery即可。