Использование объединения GraphQL с apollo-реагировать в реагирующем - PullRequest
0 голосов
/ 16 мая 2018

В настоящее время я использую response-apollo в приложенииact-native и сталкиваюсь с проблемой.

Всякий раз, когда я пытаюсь сделать запрос, содержащий объединение, он завершается неудачей, вызывая следующую сетевую ошибку:

Ошибка сети: запрошенные ключи значения, не являющегося объектом

Я использую точно такой же код в приложении React.js, которое работает толькохорошо.Конечная точка GraphQL - это мой собственный сервер, разработанный на PHP с пакетом Youshido.

Вот часть объявления фрагмента:

const httpLink = new HttpLink({uri: 'http://10.1.68.64:8000/graphql'});

const fragmentMatcher = new IntrospectionFragmentMatcher({
    introspectionQueryResultData: {
      __schema: {
        types: [
          {
            "kind": "UNION",
            "name": "QuestionUnion",
            "possibleTypes": [
              {
                "name": "QuestionUnionTypeA"
              },
              {
                "name": "QuestionUnionTypeB"
              },
              {
                "name": "QuestionUnionTypeC"
              }
            ]
          },
        ],
      },
    }
});

const cache = new InMemoryCache({ fragmentMatcher });

const client = new ApolloClient({
    link: httpLink,
    cache: cache,
});

Запрос в файле Screen.js (точно такой же вReact.js и response-native):

const FindForm = gql`query FindForm($id: ID!){
    findForm(id: $id){
        id
        title
        questions {
            id
            ... on QuestionUnionTypeA {
                parameterA
            } 
            ... on QuestionUnionTypeB {
                parameterB
            }
            ... on QuestionUnionTypeC {
                parameterC
            }
        }
    }
}`;

Часть, использующая запрос в том же файле Screen.js:

const resultDisplayer = ({ data }) => {
    if(data.error){
        return <Text> {JSON.stringify(data)} </Text>;
    }
    if(data.loading){
        return <Spinner/>;
    }
    else {
        return <Text> Ok </Text>;
    }
};

const query = graphql(FindForm, {
    options: {
        variables: {
            id: this.state.id,
        }
    }
})(resultDisplayer);

Тревожная часть заключается в том, что ошибка не выдаетсяв некоторых случаях:

  • Когда я удаленно отлаживаю приложение
  • Когда запрос не содержит часть объединения
  • Когда часть объединения не имеет ничего кreturn (Если нет экземпляров QuestionUnionTypeA, B и C)

Таким образом, я предполагаю, что я делаю что-то не так, но я не могу найти, где я ошибся.Если у вас, ребята, есть идеи, я готов попробовать все, что придет.

...