[英]How do you define a fragment using graphql-js?
如何使用graphql-js在架构中定义片段?
import graphql from 'graphql'
/* how do I do this?
fragment authorInfo on Author {
name
}
*/
例如,要定义作者类型,我将:
import graphql from 'graphql'
export default new graphql.GraphQLObjectType({
description: `An author`,
name: {
description: `The author's legal name.`,
type: GraphQLString
}
}),
name: `Author`
})
因此,这里的类型定义是由GraphQLObjecType
生成的。 什么功能生成片段?
您没有在架构中定义片段。 您在查询时在graphql接口上定义。 这是关于不要重复自己。
我们可以在一个query{ }
进行多达不同的查询
query {
company(id:"1"){
name
description
}
company(id:"4"){
name
description
}
}
如果这样做,则会出现错误:字段“ company”冲突,因为它们具有不同的参数。 为了消除这种情况,我们可以通过在前面写一些任意键来命名查询返回时的结果。 我们收到此错误的原因是响应对象将具有2个嵌套对象,并且它们都将具有“ company”键值,但是在javascript中,我们不能在对象上具有重复键。
{
apple: company(id:"1"){
name
description
}
google: company(id:"4"){
name
description
}
}
现在我们解决了这个问题。 想象一下,我们想在一个具有太多字段的查询对象中进行100个查询。 这将是一个很大的头痛。 所以我们定义片段
fragment companyDetails on Company{
name
description
}
请注意,我们必须on Company
上指定。 它有助于graphql进行类型检查。 graphql检查这些字段在company下是否有效。 最终,这就是我们的使用方式
{
apple: company(id:"1"){
...companyDetails
}
google: company(id:"4"){
...companyDetails
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.