【问题标题】:How are arguments added to GraphQL, do they need to be defined before?参数是如何添加到 GraphQL 中的,之前是否需要定义它们?
【发布时间】:2020-06-10 23:23:59
【问题描述】:

大家好,我只是想在使用 Gatsby 时学习 graphql。我想知道 graphql 中的每个字段是否带有参数,或者是否需要在之前以某种方式定义。例如,如果您访问此链接graphql search results

https://graphql.org/swapi-graphql?query=%7B%0A%09allPeople%20%7B%0A%09%20%20people%20%7B%0A%09%20%20%20%20id%0A%20%20%20%20%20%20name%0A%20%20%20%20%20%20birthYear%0A%20%20%20%20%20%20eyeColor%0A%09%20%20%7D%0A%09%7D%0A%7D%0A

如果我想通过眼睛颜色来限制人们,我会怎么做。在文档中,这似乎很容易,因为您只需执行 people(eyecolor: 'brown') 之类的操作,但这似乎是不可能的。我错过了什么吗?我基本上想对所有眼睛颜色为棕色的人进行 SQL 样式搜索。

谢谢。

【问题讨论】:

    标签: graphql arguments


    【解决方案1】:

    参数需要在模式中定义并在解析器中实现。如果您正在使用 3rd 方 API(如您提供的链接),您将受限于他们的架构。您可以通过查看他们的架构(通过单击页面右侧的Docs)来判断哪些字段带有参数。例如,person 接受 idpersonID 参数:

    people 不接受任何参数,如架构所示:

    如果您正在构建自己的架构,则可以向任何字段添加参数,当您为该字段实现解析器时,您可以将参数用于该解析器中的逻辑。

    如果您使用的是您无法控制的架构,则必须在前端添加过滤:

    const {people} = data.allPeople;
    const brownEyedPeople = people.filter(({eyeColor}) => eyeColor === 'brown');
    

    【讨论】:

    • 谢谢你,我希望在文档中更明确,看起来你可以为任何变量输入参数,这看起来不错:)
    【解决方案2】:

    当您开始在 Gatsby 中进行开发并实际将数据提取到 Gatsby 中时,将有一个 filter 查询选项自动在查询参数中可用。

    https://www.gatsbyjs.org/docs/graphql-reference/#filter

    您可以使用以下查询按eyeColor过滤您的

    {
      allPeople(filter: { eyeColor: { eq: "brown" } }) {
        edges {
          node {
            id
            name
            birthYear
            eyeColor
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-10-19
      • 1970-01-01
      • 2018-07-12
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      • 2015-03-15
      • 2021-04-01
      • 1970-01-01
      相关资源
      最近更新 更多