Не удается прочитать правильный запрос в GraphQL Apollo Client

На одной из моих страниц в моем приложении я делаю два вызова API с помощью клиента Graphql Apollo. Один 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 ответ

Решение

Ты прав. Вы получаете ошибку, потому что данные еще не в кеше:

Метод запроса, с другой стороны, может отправлять запрос на ваш сервер, если соответствующие данные не находятся в вашем кеше, тогда как readQuery выдает ошибку, если данные не находятся в вашем кеше. readQuery всегда будет читать из кеша.

https://www.apollographql.com/docs/react/advanced/caching/

Чтобы сделать то, что вы хотите, используйте обычный запрос с cache-onlyfetchPolicy, https://www.apollographql.com/docs/react/api/react-apollo/

Другие вопросы по тегам