GraphQL:如何使用精选的参数列表(2D数组)创建查询

时间:2018-04-09 01:49:16

标签: arrays graphql relaymodern

具体来说,我觉得我正在寻找问题asked here的答案,但事实证明问题的标题并不是实际问题的完美匹配。

我期待做的事涉及Relay,React和GraphQL(我想我可以说Relay,你可以想出其他两个)。

我想要做的,以及我似乎无法找到答案的是,创建一个查询,根据某些预定义的JSON数组列出查询片段的变量列表。

如果您查看我的主页jimmyvanveen.com,您会看到我已经处理过(或正在处理的)项目列表,并且每个项目都会呈现为React组件。我通过他们的REST API(v3)从Github中提取这些数据 - 但现在我想迁移到GraphQL(v4)。

我可以根据Github API的Schema的要求创建一个包含repo名称和所有者的数组,但我不知道如何根据简单数组动态创建查询,例如:

repos: [
  {"name": "repo name", "owner": "Repo Owner"},
  {"name": "other repo", "ownder": "Other Owner"}
]

我知道如何创建一个可以手动查找所有这些信息的查询,但我希望有一种GraphQL方式(可能通过发送变量?)在一个查询中运行整个数组并返回repo数组数据

我试图在这里或任何地方寻找答案的几天都在绞尽脑汁,我已经罢工了。

提前感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:0)

因此,最后我发现我通常只是向Github提交错误的信息,以便从策划列表中提取回购信息。

我上面的目标仍然不能完全按照我想解决的方法来实现,但是上面提到的方法与确实可行的可用方法非常相似。简而言之,为Github提供一系列唯一的节点ID,而不是像我一直在尝试的那样,提供Repo Name和Repo Owner。

通过这种方式,您不会尝试使用2D数组,而是使用了一个与2D数组具有相同数量特异性的单个数组。

因此制定一个数组,例如:

const repos = [
  'uniqueID1',
  'uniqueID2',
  'uniqueID3',
  ...
];

...然后可以通过中继传递(我将QueryRenderer设置为在我的App组件上运行),如下所示:

query AppQuery($repos:[ID!]!) {
   projects: nodes(ids:$repos){
     ...projects_projects
   }
 }

您可以通过多种方式获取节点ID,但是我这样做的方式是通过在GraphiQL中使用如下查询逐个提取回购信息:

query { 
  repository(owner:"JimmayVV", name:"JimmyVanVeen.com") {
    id
  }
}

然后我将所有这些ID合并到一个数组中,并将其传递给Relay,并获得了所需的结果。

我确定还有其他方法,也许使用简单的Node脚本为您创建数组,但这对我来说很简单,我对此感到满意。