首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用graphql-js定义片段?

如何使用graphql-js定义片段?
EN

Stack Overflow用户
提问于 2017-01-10 10:32:53
回答 2查看 1.7K关注 0票数 1

如何使用graphql-js在我的模式中定义片段?

代码语言:javascript
复制
import graphql from 'graphql'
/* how do I do this?
fragment authorInfo on Author {
  name
}
*/

例如,要定义Author类型,我将:

代码语言:javascript
复制
import graphql from 'graphql'
export default new graphql.GraphQLObjectType({
  description: `An author`,
    name: {
      description: `The author's legal name.`,
      type: GraphQLString
    }
  }),
  name: `Author`
})

所以这里的类型定义是由GraphQLObjecType生成的。什么函数会生成片段?

EN

回答 2

Stack Overflow用户

发布于 2017-01-10 23:48:40

Fragments用于对字段进行分组并在客户端重用它们。在服务器端和创建模式时,您不应该担心这些问题。

客户端代码应该在从服务器查询数据时提供片段。GraphQL本身负责在查询中添加零碎的字段。在服务器上,您需要指定所有对象上的所有字段。

当然,您可以编写自己的帮助器来减少手动工作。

variables也是如此。

票数 4
EN

Stack Overflow用户

发布于 2019-09-01 01:30:44

您没有在架构中定义片段。在执行查询时,您可以在graphql接口上定义。这是关于不要重复你自己。

我们可以在query{ }中进行尽可能多的不同查询

代码语言:javascript
复制
query {
   company(id:"1"){
    name
    description
  }
  company(id:"4"){
    name
    description
  }
}

如果你这样做,你会得到一个错误:字段“company”冲突,因为它们有不同的参数。为了摆脱这一点,我们可以在查询返回时通过在前面写出一些任意键来命名查询结果。我们得到这个错误的原因是response对象将有两个嵌套的对象,它们都有"company“键值,但在javascript中,我们不能在一个对象上有重复的键。

代码语言:javascript
复制
{
  apple: company(id:"1"){
    name
    description
  }
  google: company(id:"4"){
    name
    description
  }
}

现在我们解决了这个问题。想象一下,我们想要在一个包含太多字段的查询对象中执行100个查询。这将是一个非常令人头疼的问题。因此我们定义了片段

代码语言:javascript
复制
fragment companyDetails on Company{  
  name
  description
  }

请注意,我们必须指定on Company。它帮助graphql进行类型检查。graphql检查这些字段在公司下是否有效。最后,这是我们使用它的方式

代码语言:javascript
复制
{
  apple: company(id:"1"){
    ...companyDetails
  }
  google: company(id:"4"){
    ...companyDetails
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41560208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档