0

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

我想要做的事情涉及 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 数据数组。

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

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

4

1 回答 1

0

所以,最后我发现我通常只是向 Github 提交错误的信息,以便从精选列表中提取 Repo 信息。

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

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

所以制定一个数组,例如:

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

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

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

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

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

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

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

于 2018-09-01T01:21:32.060 回答