Прежде всего здесь мой фрагмент:реле setVariables функции терпят неудачу
initialVariables: {
limit: 3,
},
fragments: {
app:() => Relay.QL`
fragment on App {
id
personnels(first: $limit) {
pageInfo {
hasNextPage
hasPreviousPage
}
edges {
cursor
node {
name
}
}
}
}
`
}
}
начальное чтение с сервера работает нормально, но когда я звоню this.props.relay.setVariables, и пытаясь установить предельную переменную, я всегда получаю:
Запрос сервера на запрос App_AppRelayQL
не удалось по следующим причинам:
- globalId не определен узел (идентификатор: $ ID_0) { ^^^
в консоли браузера. Я думаю, что это может иметь какое-то отношение к схеме. Но не уверен, что, так вот моя схема:
import {
GraphQLSchema,
GraphQLObjectType,
GraphQLString,
GraphQLInt,
GraphQLList,
GraphQLID,
GraphQLNonNull
} from 'graphql';
import {
nodeDefinitions,
fromGlobalId,
globalIdField,
connectionDefinitions,
connectionFromArray,
connectionArgs,
mutationWithClientMutationId
} from 'graphql-relay';
class App {};
class Personnel {};
let app = new App();
let Personnels = [];
(() => {
let Jason = new Personnel();
let John = new Personnel();
Jason.name = 'Jason';
Jason.id = 1;
John.name = 'John';
John.id = 2;
personnels.push(YangGuoRong);
personnels.push(DengLiFang);
})();
let {nodeInterface, nodeField} = nodeDefinitions(
(gloablId) => {
const {type} = fromGlobalId(globalId);
switch(type) {
case 'App':
return app;
default:
return null;
}
},
(obj) => {
if (obj instanceof App) {
return appType;
} else if (obj instanceof Personnel) {
return personnelType;
} else {
return null;
}
}
);
let getPersonnel = (id) => personnels[id];
let getPersonnels =() => personnels;
let appType = new GraphQLObjectType({
name: 'App',
fields:() => ({
id: globalIdField('App'),
personnels: {
type: personnelConnection.connectionType,
args: connectionArgs,
resolve: (_, args) => connectionFromArray(personnels, args)
}
}),
interfaces: [nodeInterface]
});
let personnelType = new GraphQLObjectType({
name: 'Personnel',
fields:() => ({
id: {
type: new GraphQLNonNull(GraphQLID),
resolve: (obj) => obj.id
},
name: {type: GraphQLString},
}),
});
let personnelConnection = connectionDefinitions({
name: 'Personnel',
nodeType: personnelType
});
new GraphQLObjectType({
name: 'Query',
fields: {
node: nodeField,
app: {
type: appType,
resolve:() => app
},
}
}),
});
export default schema;
Ничего себе, спасибо большое. Не могу поверить, насколько я был небрежен. Большое спасибо. Я думаю, что у relay и graphql есть много жаргонов, которые вам нужно ввести точно, было бы здорово, если бы они могли сделать эти API более гибкими. – Nexus2020
Добро пожаловать. У меня также было много ситуаций, когда ошибки в некоторых реле или материалах graphql вызывали ошибки. Поэтому я думаю, что ты прав. Но в этом случае globalId является просто именем переменной. Вы могли бы также назвать его gloablId;) – jkettmann
Держу пари, если можно реализовать своего рода intellisense, который сортирует все эти жаргоны, многие люди будут его использовать. – Nexus2020