如何为自引用数据层次创建graphql模式?
问题描述:
这行不通,因为类型是指其在路线字段定义自我:如何为自引用数据层次创建graphql模式?
var routeType = new GraphQLObjectType({
name: 'MessageRoute',
fields: {
name: {
type: GraphQLString
},
routes: {
type: new GraphQLList(routeType),
resolve: (route) => {
return route.routes;
}
}
}
});
让我怎么办呢?
答
通过将fields
定义为返回对象而不是对象的函数,GraphQL类型可以引用自身(或引用稍后在文件中定义的另一种类型)。该函数将在页面完全解析后调用。
对于示例:
var routeType = new GraphQLObjectType({
name: 'MessageRoute',
fields: function() {
return {
name: {
type: GraphQLString
},
routes: {
type: new GraphQLList(routeType),
resolve: (route) => {
return route.routes;
}
}
};
}
});
或者,如果你使用ES6,一个漂亮的简写本使用箭头功能:
var routeType = new GraphQLObjectType({
name: 'MessageRoute',
fields:() => ({
name: {
type: GraphQLString
},
routes: {
type: new GraphQLList(routeType),
resolve: (route) => {
return route.routes;
}
}
})
});
答
我想指出的是,你可以使用Javascript getter的对象内的任何属性的函数。
因此,而不是一个函数内包裹整个fields
属性,您可以使用函数只为type
属性是这样的:
var routeType = new GraphQLObjectType({
name: 'MessageRoute',
fields: {
name: {
type: GraphQLString
},
routes: {
get type() {
return new GraphQLList(routeType)
},
resolve: (route) => {
return route.routes;
}
}
}
});
酷感谢,任何想法,我怎么写的东西作出反应方面没有得到一个堆栈溢出? – SammoSampson