Использовать кеш в клиенте apollo
Я пытаюсь прочитать данные из кеша Apollo (React + Apollo Client 2.6).
Мой код:
try {
const {users} = client.readQuery({
query: GetUsersForView
});
console.log(users);
}
catch(e) {
console.log('Query is not in cache:', e);
}
Мой запрос:
query GetUsersForView($search : String, $country_id : [ID]) {
users (
filters : {
search: $search
country: $country_id
}) {
...BasicData
country {
...BasicData
}
}
}
Результат в консоли:
Query is not in cache: Invariant Violation: Can't find field users({"filters":{}}) on object {
"authenticatedUser": {…},
"userSettings": {…},
"users({\"filters\":{\"country\":[],\"search\":\"\"}})": [
{…},
{…},
{…}
],
"countries": [
{…},
{…},
{…},
{…}
]
}.
Что я делаю не так? Результаты запроса находятся в кеше, так почему я не могу получить данные?
1 ответ
Этот фрагмент показывает, что он ищет users({"filters":{}})
в кеше:
Query is not in cache: Invariant Violation: Can't find field users({"filters":{}}) on object {
"authenticatedUser": {…},
"userSettings": {…},
"users({\"filters\":{\"country\":[],\"search\":\"\"}})": [
{…},
{…},
{…}
],
"countries": [
{…},
{…},
{…},
{…}
]
}.
но вы можете увидеть 4 строки ниже, что ваш кеш вместо этого содержит ключ users({\"filters\":{\"country\":[],\"search\":\"\"}})
- Похоже, в вашем примере вы не передаете переменные в запрос. Раньше где-то в вашем приложении они были запрошены и сохранены в вашем кеше путем вызова запроса со следующими переменными:
{
country: [],
search: ""
}
и поэтому вы должны передать их снова, чтобы позволить apollo найти его в кеше, например (адаптируя свой первый фрагмент):
try {
const {users} = client.readQuery({
query: GetUsersForView,
variables: {
country: [],
search: ":
},
});
console.log(users);
}
catch(e) {
console.log('Query is not in cache:', e);
}