2017-06-26 11 views
1

我正在用中繼架構構建一個使用GraphQL(託管在graph.cool上)的React Native應用程序。 我在頂層組件中有一個QueryRenderer,它使用片段爲演示組件提取數據,這很好地工作。作爲反應組件中的GraphQL片段的EnumValues的內省查詢

我的問題:我想做一個自省查詢來獲取可能的枚舉值作爲一個列表,爲我的架構中的特定字段,並獲取這些片段旁邊。 我當前的查詢與片段:

query ReportingContainerQuery { 
    viewer { 
     ...MainList_items 
      ... 
    } 
} 

的MainList_items片段:

fragment AnimalList_items on Viewer { 
    allAnimalCategories { 
     edges { 
      node{ 
       id 
       ...AnimalListRow_item 
      } 
     } 
    } 
} 

我得到了下面的查詢通過內省獲取enumValues工作(使用:https://www.graph.cool/forum/t/how-to-access-the-possible-values-of-an-enum-type-created-inside-the-console/23/2):

query { 
    __type(name: "JOURNAL_ENTRY_GENDER") { 
     enumValues { 
      name 
     } 
    } 
} 

但我似乎無法找到一種方法來創建可添加到頂級查詢中的片段。 我可以將內省直接粘貼到頂層查詢中,但據我瞭解,這對中繼框架有效。由於這樣做,我必須明確地將結果作爲道具傳遞下來,而不是讓表示組件明確需要什麼,並將其作爲片段提供給頂層的QueryRenderer,並讓中繼框架隱式地傳遞查詢結果直至組件。

回答

1

經過一番修改之後,我找到了解決方法 - 它留下兩個地方來維護片段查詢,但它是我發現解決它的唯一方法。 :)

以我分量i定義的下列片段:

fragment GenderTile_items on __Type { 
    enumValues{ 
    name 
    } 
} 

然後在我的主容器,我擴展查詢在QueryRenderer具有以下

query ReportingContainerQuery { 
    viewer { 
    ...MainList_items 
     ... 
    } 

    __type(name: "JOURNAL_ENTRY_GENDER"){ 
    ...GenderTile_items 
    } 
} 

所得枚舉從數據QueryRenderer然後通過將'props .__ type'傳遞給具有相應片段的組件並從那裏訪問props.items.enumValues(因爲數據的道具被定義爲片段中的'items' GenderTile_ 項目時遵循命名約定'FileName_propName'。 (https://facebook.github.io/relay/docs/fragment-container.html#data-dependencies-with-graphql))。

然後我遇到了問題,我想要獲取多種類型的枚舉,並且查詢返回了重複__type賦值的錯誤。這可以通過使用別名是固定這個是這樣的:

query ReportingContainerQuery { 
    viewer { 
    ...MainList_items 
     ... 
    } 

    genderEnums: __type(name: "JOURNAL_ENTRY_GENDER"){ 
    ...GenderTile_items 
    } 

    otherEnums: __type(name: "JOURNAL_ENTRY_OTHER"){ 
    ...OtherComponent_items 
    } 
} 

的數據是接着經由道具可用[別名](例如‘props.genderEnums’和‘props.otherEnums’),通過它來傳遞給帶有片段的組件以及如上所述通過props.items.enumValues訪問它。

希望對於和我一樣遇到同樣問題的任何人都有意義。 :D