Я получаю следующую ошибку при попытке получить фрагмент запроса:
"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
IntrospectionFragmentMatcheras 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 к фрагменту не помогло.
IntrospectionFragmentMatcher независимо от... (документы говорят, что это нужно только when using fragments on interfaces or unions, чего мы не делаем)Обновлять
ApolloClient создается следующим образом
client = new ApolloClient({
link: createLink('MY_URL', Apollo.fetch),
cache: new InMemoryCache(),
});
@ User97 Я добавил код выше, в настоящее время у него нет пользовательской конфигурации.
Хорошо, я не вижу никаких причин для того, чтобы в этом случае выдавать ошибку, если ${typename} передается правильно.
Вы пишете напрямую в кеш в своем коде, используя writeQuery, writeFragment или writeData? Если да, пропускаете ли вы запись __typename, когда делаете это?
Ошибка возникает при вызове `readFragment', поэтому перед любыми вызовами записи. Я пытался удалить их все и все равно получаю то же сообщение
Пробовали ли вы создать свой клиент аполлона с этими параметрами { dataIdFromObject: obj => obj.id, addTypename: false, fragmentMatcher: { match: ({ id }, typeCond, context) => !!context.store.get(id) } }



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужно создать кеш аполлона и настроить функции нормализации с помощью 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,
});
Не могли бы вы поделиться кодом создания экземпляра
InMemoryCache?