В настоящее время я использую 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)
Таким образом, я предполагаю, что я делаю что-то не так, но я не могу найти, где я ошибся.Если у вас, ребята, есть идеи, я готов попробовать все, что придет.