如何为自引用数据层次结构创建graphql模式?
这不起作用,因为类型在routes字段定义中引用了其自身:如何为自引用数据层次结构创建graphql模式?,graphql,relayjs,Graphql,Relayjs,这不起作用,因为类型在routes字段定义中引用了其自身: var routeType = new GraphQLObjectType({ name: 'MessageRoute', fields: { name: { type: GraphQLString }, routes: { type: new GraphQLList(routeType), resolve: (route) => { retu
var routeType = new GraphQLObjectType({
name: 'MessageRoute',
fields: {
name: {
type: GraphQLString
},
routes: {
type: new GraphQLList(routeType),
resolve: (route) => {
return route.routes;
}
}
}
});
那么我该怎么做呢?通过将
字段定义为返回对象而不是对象的函数,GraphQL类型可以引用自身(或引用文件中稍后定义的另一种类型)。该函数将在页面完全解析后调用
例如:
var routeType=新的GraphQLObjectType({
名称:“MessageRoute”,
字段:函数(){
返回{
姓名:{
类型:GraphQLString
},
路线:{
类型:新GraphQList(routeType),
解析:(路由)=>{
返回路线;
}
}
};
}
});
或者,如果您使用的是ES6,那么使用箭头函数可以很好地简化此操作:
var routeType=新的GraphQLObjectType({
名称:“MessageRoute”,
字段:()=>({
姓名:{
类型:GraphQLString
},
路线:{
类型:新GraphQList(routeType),
解析:(路由)=>{
返回路线;
}
}
})
});
我想指出,您可以使用函数为对象中的任何属性使用函数
因此,不必将整个字段
属性包装在一个函数中,您可以将函数仅用于类型
属性,如下所示:
var routeType = new GraphQLObjectType({
name: 'MessageRoute',
fields: {
name: {
type: GraphQLString
},
routes: {
get type() {
return new GraphQLList(routeType)
},
resolve: (route) => {
return route.routes;
}
}
}
});
很酷,谢谢,你知道我如何在不导致堆栈溢出的情况下编写react端吗?有没有办法让graphql查询的结果成为自引用的?我知道这在XML中是可能的——目前我对GraphQL有相当基本的了解。graphql引擎是否可能解析XML而不是JSON?