Использовать кеш в клиенте 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);
}
Другие вопросы по тегам