簡體   English   中英

如何使用graphql-js定義片段?

[英]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本身負責在查詢中添加碎片字段。 在服務器上,您需要指定所有對象上的所有字段。

當然,您可以編寫自己的助手來減少手工工作。

變量也一樣。

您沒有在架構中定義片段。 您在查詢時在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM