ReadFragment вызывает ошибку IntrospectionFragmentMatcher, хотя не использует интерфейс или объединения

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

"You are using the simple (heuristic) fragment matcher, but your queries contain union or interface types. Apollo Client will not be able to accurately map fragments. To make this error go away, use the IntrospectionFragmentMatcher as described in the docs: https://www.apollographql.com/docs/react/recipes/fragment-matching.html"

Это вызов, который вызывает ошибку.

const sourceData = cache.readFragment({
        id: `${typename}:${idToAdd}`,
        fragment: gql`
          ${sourceFragment}
        `,
      });

где исходный фрагмент

fragment series on PriceSeries {
    id
    title
    description
    commodity
    region
    location
    isDiscontinued
    order
}

Аполлон, кажется, классифицирует возвращаемое значение фрагмента как объединение или интерфейс. Я не думаю, что добавление IntrospectionFragmentMatcher должно быть необходимым, поскольку нам не нужны объединения или интерфейсы, хотя, возможно, я ошибаюсь. Добавление __typename к фрагменту не помогло.

  • Как мне удалить эту ошибку (может быть, мне просто не хватает синтаксиса gql для ввода?)
  • Означает ли использование фрагментов, что мы должны настроить IntrospectionFragmentMatcher независимо от... (документы говорят, что это нужно только when using fragments on interfaces or unions, чего мы не делаем)
  • Является ли ошибка ошибкой, я должен просто скрывать ошибку (она работает как есть, если вы ее игнорируете)

Обновлять

ApolloClient создается следующим образом

 client = new ApolloClient({
      link: createLink('MY_URL', Apollo.fetch),
      cache: new InMemoryCache(),
    });

Не могли бы вы поделиться кодом создания экземпляра InMemoryCache?

Raeesaa 22.03.2019 11:39

@ User97 Я добавил код выше, в настоящее время у него нет пользовательской конфигурации.

Tom 22.03.2019 11:52

Хорошо, я не вижу никаких причин для того, чтобы в этом случае выдавать ошибку, если ${typename} передается правильно.

Raeesaa 22.03.2019 11:56

Вы пишете напрямую в кеш в своем коде, используя writeQuery, writeFragment или writeData? Если да, пропускаете ли вы запись __typename, когда делаете это?

Daniel Rearden 22.03.2019 12:59

Ошибка возникает при вызове `readFragment', поэтому перед любыми вызовами записи. Я пытался удалить их все и все равно получаю то же сообщение

Tom 22.03.2019 13:14

Пробовали ли вы создать свой клиент аполлона с этими параметрами { dataIdFromObject: obj => obj.id, addTypename: false, fragmentMatcher: { match: ({ id }, typeCond, context) => !!context.store.get(id) } }

Siya Mzam 01.04.2019 09:23
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
6
1 131
1

Ответы 1

Вам нужно создать кеш аполлона и настроить функции нормализации с помощью dataIdFromObject.

import { InMemoryCache, IntrospectionFragmentMatcher } from 'apollo-cache-inmemory';

const fragmentMatcher = new IntrospectionFragmentMatcher({
  // Here you may want to pass your introspection query result data,
});

const cache = new InMemoryCache({
  dataIdFromObject: o => o.id,
  fragmentMatcher,
});

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