2017-06-26 7 views
1

私は、Relay Schemaを使用してGraphQL(Graphic.coolでホスト)を使用してReact Nativeアプリケーションを構築しています。 トップレベルのコンポーネントにQueryRendererがあり、フラグメントを使ってプレゼンテーションコンポーネントのデータを取得していますが、正常に動作しています。EnumValuesのイントロスペクションクエリが反応コンポーネント内のGraphQLフラグメントとして返されます

私の問題:可能な列挙型の値をリストとしてフェッチし、スキーマ内の特定のフィールドに対してフェッチし、これらのフラグメントをフェッチするために、イントロスペクションクエリを実行します。 断片と私の現在のクエリ:

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

MainList_itemsフラグメント:

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

は、私が(:https://www.graph.cool/forum/t/how-to-access-the-possible-values-of-an-enum-type-created-inside-the-console/23/2を使用して):イントロスペクションを通じてenumValuesをフェッチするために働いて、次のクエリを得た

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

しかし、私はトップレベルのクエリに追加できるフラグメントを作成する方法を見つけることができないようです。 私は、イントロスペクションをトップレベルのクエリに直接貼り付けることができますが、それはリレーフレームワークに対して、私が理解している限り、それはうまくいくでしょう。このようにすると、結果を小道具として明示的に渡す必要があります。プレゼンテーションコンポーネントに必要なものを指定させ、それをフラグメントとして最上位レベルのQueryRendererに渡し、リレーフレームワークが暗黙的に結果をコンポーネントに問い合わせます。

答えて

1

私はそれを解決する方法を見つけた後、フラグメントクエリを維持するために2つの場所を残しましたが、それが解決したことがわかった唯一の方法でした。 :)私は、次の断片定義私の成分で

:私の主容器に続い

fragment GenderTile_items on __Type { 
    enumValues{ 
    name 
    } 
} 

を、私は、次の

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

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

から得られた列挙型データとQueryRendererにクエリを拡張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

関連する問題