Как мне сгенерировать типы фрагментов для клиента apollo? - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть приложение, написанное с разумом-реакцией с использованием apollo-client.Я определил некоторые фрагменты на внешнем интерфейсе, чтобы в основном использовать некоторые определения полей.Я настраиваю автоматические тесты для компонентов, которые используют фрагменты, но я продолжаю получать это предупреждение о том, что мне нужно использовать 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/advanced/fragments.html#fragment-matcher'

Я попытался настроить средство сопоставления фрагментов в соответствии с документы .Результат codegen не возвращает типов:

{
  "__schema": {
    "types": []
  }
}

Когда я запросил свой сервер и посмотрел на ручной метод, рекомендованный apollo-client, я заметил, что он также не возвращает типов.

Еще один странныйДело в том, что когда я не использую средство сопоставления фрагментов, я получаю поддельный ответ, но я просто получаю предупреждения от Аполлона.Если я его использую, то смоделированный ответ не будет возвращаться правильно.

Зачем мне запрашивать api graphql для фрагментов, определенных в моем коде внешнего интерфейса?Почему я получал эти ошибки только при выполнении тестов и использовании фиктивных данных, но не при запуске моего реального приложения?

1 Ответ

0 голосов
/ 19 сентября 2019

Как гласит ошибка, сопоставление фрагментов по умолчанию не работает на типах пересечения или объединения.Вам нужно будет использовать Apollo IntrospectionFragmentMatcher .Он работает, запрашивая у сервера (самоанализ) информацию о типах вашей схемы, а затем предоставляет эту информацию для ссылки на кэш, чтобы он мог точно соответствовать полям.Он не запрашивает у сервера информацию о фрагментах, которые вы определяете во внешнем интерфейсе, он запрашивает данные о схеме GraphQL, которые должны быть определены в вашем внутреннем интерфейсе, чтобы они могли правильно соотноситься с этими двумя.В документации приведен пример, а также дополнительная информация здесь .

Что касается того, почему ваш сервер не возвращает какие-либо типы, это отдельная проблема, которая требует дополнительной информации для отладки.Если вы используете Apollo Server, перепроверьте свою схему, чтобы убедиться, что все необходимые типы определены правильно и что вы передаете их на сервер при инициализации.

...