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



具体来说,我觉得我正在寻找这里提出的问题的答案,但事实证明问题的标题与实际问题并不完美匹配。

我想做的是 Relay、React 和 GraphQL(我想我可以说 Relay,你可以找出另外两个)。

我想做的,我似乎找不到答案的是创建一个查询,该查询基于某些预定义的 JSON 数组列出查询片段的变量列表。

如果你看一下我的主页,jimmyvanveen.com 你会看到我有一个我曾经做过(或正在做)的项目列表,每个项目都渲染为 React 组件。我正在通过他们的 REST API (v3) 从 Github 中提取这些数据 - 但现在我想迁移到 GraphQL (v4)。

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

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

我知道如何进行可以手动查找所有这些信息的查询,但我希望有一种 GraphQL 方法(也许通过发送 vars?)在一个查询中运行整个数组并返回存储库数据数组。

几天来,我一直在绞尽脑汁,试图在这里或任何地方找到答案,我正在罢工。

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

所以,最后我发现我通常只是向 Github 提交错误的信息,以便从策划列表中提取存储库信息。

我上面的目标仍然不可能完全按照我想要的方式解决问题,但是上面提到的方法与确实有效的可用方法非常相似。简单地说,为 Github 提供一组唯一的节点 ID,而不是像我一直试图做的那样,提供 Repo 名称和 Repo Owner。

这样,您就不会尝试使用 2D 数组,而是使用单个数组,其特异性与 2D 数组相同。

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

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

。然后可以通过中继传递(我已将 QueryRenderer 设置为在我的应用程序组件上运行),如下所示:

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

您可以通过多种方式获取节点 ID,但我这样做的方式是在 GraphiQL 中通过如下查询逐个拉取存储库信息:

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

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

我相信还有其他方法,也许使用一个简单的 Node 脚本来为您制定数组,但这对我来说很简单,我很满意。

最新更新