我正在使用GraphQL(在graph.cool上托管)和Relay Schema构建一个React Native应用程序 . 我在顶级组件中有一个QueryRenderer,使用片段获取表示组件的数据,这很好 .
我的问题:我想做一个内省查询来获取可能的枚举值作为列表,对于我的模式中的特定字段,并在片段旁边获取这些值 . 我对片段的当前查询:
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 回答
经过一些修补我找到了解决它的方法 - 它留下了两个地方来维护片段查询,但这是我发现解决它的唯一方法 . :)
在我的组件中,我定义了以下片段:
然后在我的主容器中,我使用以下内容在QueryRenderer中扩展了查询
然后,通过将'props._type'向下传递给具有相应片段的组件并从那里访问props.items.enumValues(因为数据的prop在片段中被定义为'items'(例如GenderTile),可以在successblock中获得来自QueryRenderer的结果枚举数据 . items 遵循命名约定'FileName_propName' . (https://facebook.github.io/relay/docs/fragment-container.html#data-dependencies-with-graphql)) .
然后我遇到了我想要获取多种类型的枚举的问题,并且查询返回了带有重复__type赋值的错误 . 这可以通过使用别名来解决这个问题:
然后可以通过道具[别名](例如'props.genderEnums'和'props.otherEnums')获取数据,然后将其传递给带有片段的组件,如上所述通过props.items.enumValues访问它 .
希望对于遇到与我一样的问题的其他人都有意义 . :d