如何使用graphql-js在我的模式中定义片段?
import graphql from 'graphql'
/* how do I do this?
fragment authorInfo on Author {
name
}
*/例如,要定义Author类型,我将:
import graphql from 'graphql'
export default new graphql.GraphQLObjectType({
description: `An author`,
name: {
description: `The author's legal name.`,
type: GraphQLString
}
}),
name: `Author`
})所以这里的类型定义是由GraphQLObjecType生成的。什么函数会生成片段?
发布于 2017-01-10 23:48:40
Fragments用于对字段进行分组并在客户端重用它们。在服务器端和创建模式时,您不应该担心这些问题。
客户端代码应该在从服务器查询数据时提供片段。GraphQL本身负责在查询中添加零碎的字段。在服务器上,您需要指定所有对象上的所有字段。
当然,您可以编写自己的帮助器来减少手动工作。
variables也是如此。
发布于 2019-09-01 01:30:44
您没有在架构中定义片段。在执行查询时,您可以在graphql接口上定义。这是关于不要重复你自己。
我们可以在query{ }中进行尽可能多的不同查询
query {
company(id:"1"){
name
description
}
company(id:"4"){
name
description
}
}如果你这样做,你会得到一个错误:字段“company”冲突,因为它们有不同的参数。为了摆脱这一点,我们可以在查询返回时通过在前面写出一些任意键来命名查询结果。我们得到这个错误的原因是response对象将有两个嵌套的对象,它们都有"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检查这些字段在公司下是否有效。最后,这是我们使用它的方式
{
apple: company(id:"1"){
...companyDetails
}
google: company(id:"4"){
...companyDetails
}
}https://stackoverflow.com/questions/41560208
复制相似问题