Не удается прочитать правильный запрос в 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-only
fetchPolicy
, https://www.apollographql.com/docs/react/api/react-apollo/