具体来说,我觉得我正在寻找问题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数组数据
我试图在这里或任何地方寻找答案的几天都在绞尽脑汁,我已经罢工了。
提前感谢您提供的任何帮助!
答案 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脚本为您创建数组,但这对我来说很简单,我对此感到满意。