如何在 graphql 查询中重用字段

Tho*_*sen 2 graphql graphql-js react-apollo

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

例如。

paginationFragment on Person
Run Code Online (Sandbox Code Playgroud)

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

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

meta {
  total
  per_page
  current_page  

  etc.    
}
Run Code Online (Sandbox Code Playgroud)

是否可以将其分解为可重复使用的东西?

Dan*_*den 5

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

const metaFragment = gql`
  fragment MetaFields on MetaType {
    total
    per_page
    current_page  
    # other fields    
  }`
Run Code Online (Sandbox Code Playgroud)

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

const usersQuery = gql`
  query getUsers {
    users {
      meta {
        ...MetaFields
      }
      # other fields
    }
  }
  ${metaFragment}
}`
Run Code Online (Sandbox Code Playgroud)

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

const sharedFields = `
  bar
  baz
  qux
`
const usersQuery = gql`
  query getFoo {
    foo {
      ${sharedFields}
      # other fields
    }
  }
}`
Run Code Online (Sandbox Code Playgroud)