Чтение фрагмента из кэша Apollo с помощью client.readFragment () - PullRequest
1 голос
/ 25 февраля 2020

После успешного выполнения запроса я вижу следующее (изображение прилагается) с помощью Apollo Dev Tools.

Однако я не могу запросить объект filter напрямую с идентификатором, скажем, 2025. Я получаю Uncaught Invariant Violation: Can't find field filters on ROOT_QUERY object.

enter image description here

Вот как я пытаюсь сделать запрос:

client.cache.readQuery({
  query: gql`
    query Filter {
      filters {
        key
        value
      }
    }
  `
});

Я также попытался с фрагментом следующим образом:

client.readFragment({
  id: '2025',
  fragment: gql`
    fragment filter on filters {
      id
      key
      value
    }
  `
});

Но это дает мне ноль.

1 Ответ

2 голосов
/ 26 февраля 2020

Вам необходимо указать объект с __typename и идентификатором, который вы запрашиваете из кэша. Обратите внимание, что идентификатор объекта filters внутри кэша Apollo filters:[id], то есть формат, который вам нужно использовать для доступа к этому фрагменту в кэше, [__typename]:[key]. Подробнее о назначении идентификаторов кэша вы можете прочитать в документах .

. Вы можете получить доступ к своему фрагменту, используя следующую команду:

const filter = client.readFragment({
  fragment: gql`
    fragment filter on filters {
      id
      key
      value
    }
  `,
  fragmentName: 'filter',
  id: 'filter:2025'
})
...