如何重用graphql查询中的字段

Posted

技术标签:

【中文标题】如何重用graphql查询中的字段【英文标题】:How to reuse fiedls in graphql queries 【发布时间】:2018-02-07 10:58:05 【问题描述】:

我知道如何使用片段,我现在的问题是片段只能在类型的查询/突变中使用。

例如。

paginationFragment on Person

我想我正在寻找的内容类似于片段,但更一般。

例如。我有一个 PersonBrowseQuery、EventsBrowseQuery、BookmarkBrowseQuery 等。都有一个包含我的分页数据的元字段

meta 
  total
  per_page
  current_page  

  etc.    

是否有可能将其归结为可重复使用的东西?

【问题讨论】:

【参考方案1】:

您的元字段是一种类型,因此您仍然可以为它使用片段:

const metaFragment = gql`
  fragment MetaFields on MetaType 
    total
    per_page
    current_page  
    # other fields    
  `

然后它可以作为使用模板文字占位符语法包含在您的查询中:

const usersQuery = gql`
  query getUsers 
    users 
      meta 
        ...MetaFields
      
      # other fields
    
  
  $metaFragment
`

只要确保片段的名称(本例中为MetaFields)匹配即可。 或者,如果您有一些不一定是片段的共享字段,并且您希望尽可能保持 DRY,则可以使用纯模板文字:

const sharedFields = `
  bar
  baz
  qux
`
const usersQuery = gql`
  query getFoo 
    foo 
      $sharedFields
      # other fields
    
  
`

【讨论】:

对于第二个选项,我得到了这个错误:String interpolation is not allowed in graphql tag:

以上是关于如何重用graphql查询中的字段的主要内容,如果未能解决你的问题,请参考以下文章

Apollo Client Angular:如何将从查询中获得的数据作为参数传递给graphql中的另一个查询?

如何对 Hasura 中的 ARRAY 字段类型运行 GraphQL 过滤器查询?

如何在graphql中获取响应中的所有字段而不在查询中传递任何字段名称

如何使用字段作为来自一个 graphql 查询的过滤器来获取位于单独查询中的流体图像?

为多个 vue 属性重用 apollo graphql 查询定义

如何使用 GatsbyJS 和 GraphQL 查询和显示包含多个图像的文件夹