Ошибка современного фрагмента реле (ожидается, что объект будет содержать данные ....) - PullRequest
0 голосов
/ 31 мая 2018

Я использую Relay и django-graphene версии 2. Country.js отображает список стран.

При использовании фрагментов я получаю эту ошибку: Предупреждение: RelayModernSelector: Ожидаемый объект будет содержать данные для фрагмента Country_country, получил {"node":{"__fragments":{"Country_country":{}},"__id":"Q291bnRyeVR5cGU6MQ=="}}.Убедитесь, что в родительскую операцию / фрагмент включен фрагмент ...Country_country без @relay(mask: false).

. QueryRenderer возвращает правильный список стран без Country_country, просто введя имя переменной.

<QueryRenderer
      environment={environment}
      query={graphql`query CartContainerQuery {
        viewer {
          id
          countries(first: 3) {
            edges {
              node {
                ...Country_country
              }
            }
            pageInfo {
              startCursor
              endCursor
            }
          }

      }
      }`}
      variables={{}}
      render={({error, props}) => {
        if (error) {
          console.log(error)
          return <div>Error!</div>;
        }
        if (!props) {
          return <div>Loading...</div>;
        }
        return (
          <div>
          {console.log(props)}
          <Country country={props.viewer.countries.edges} />
          </div>
        );
      }}
    />

Мой фрагмент на Контрине Контейнера:

export default createFragmentContainer(
   Country,
   graphql`
   fragment Country_country on CountryType @relay(plural: true) {
       id
       name
     }
   `
 )

Схема графена:

class CountryType(DjangoObjectType, model=Country):
  class Meta:
    interfaces= (relay.Node,)
    filter_fields = ['name', 'id']

class Viewer(graphene.ObjectType):
  class Meta:
    interfaces = [relay.Node, ]

  countries = DjangoFilterConnectionField(CountryType)
  country = graphene.List(CountryType)

  def resolve_country(self, info, **kwargs):
    return Country.objects.all()

  def resolve_countries(self, info, **kwargs):
    return Country.objects.all()

class Query(graphene.ObjectType):
  viewer = graphene.Field(Viewer)
  node = relay.Node.Field()

  def resolve_viewer(self, info):
    return Viewer()

Если я попробую этот запрос в QueryRenderer, он также будет работать нормально:

query={graphql`query CartContainerQuery {
            viewer {
              id
              country {
                  ...Country_country
                }
            }
          }`}

AmЯ использую DjangoFilterConnectionField ложно?

1 Ответ

0 голосов
/ 14 июня 2018

Насколько я знаю и тестирую прямо сейчас, ваша графеновая сторона в порядке, и ошибка связана с ReactJS, это означает, что вы действительно используете DjangoFilterConnectionField.

У меня есть много исследований по этому поводу, но пока яЯ не видел ваш код React полностью, я немного сомневаюсь.В любом случае, как я видел в этом примере ( Запрос , Фрагмент ), вы используете это неправильно:

<Country country={props.viewer.countries.edges} />

Вы должны использовать это так:

<Country country={props.viewer.countries} />

насколько я понимаю, вы обязаны передать запрашиваемый объект ребенку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...