【问题标题】:How to use an array inside a GraphQL Query Variable如何在 GraphQL 查询变量中使用数组
【发布时间】:2020-01-22 19:24:46
【问题描述】:

我想在 GraphQL 查询变量中使用一个数组,这样我就可以从 Gatsby 的单个查询中获取多个产品的数据,但是目前我遇到了错误。

我的 graphQL 查询如下所示:

query ($id: [String!]) {
  shopifyProduct(handle: {eq: $id}) {
    handle
    id
    title
    handle
    productType
    shopifyId
  }
}

我的查询变量看起来像:

{
  "id": ["liner-jacket", "pocket-t-shirt"]
}

期望的响应是(类似于):

{
  "data": {
    "shopifyProduct": {
      "handle": "liner-jacket",
      "id": "Shopify__Product__hopbjidjoqjndadnawdawda123123=",
      "title": "Liner Jacket",
      "productType": "jacket",
      "shopifyId": "hopbjidjoqjndadnawdawda123123="
    },
    "shopifyProduct": {
      "handle": "pocket-t-shirt",
      "id": "Shopify__Product__iajwdoiajdoadjwaowda4023123=",
      "title": "Pocket T-Shirt",
      "productType": "t-shirt",
      "shopifyId": "iajwdoiajdoadjwaowda4023123="
    }
  }
}

【问题讨论】:

    标签: graphql gatsby graphql-js


    【解决方案1】:

    GraphQL 支持一种特殊的 List 类型,它表示特定类型的数组。例如,[String]String 类型的列表。尽管 [String] 类型 wraps String,但在 GraphQL 中,它被视为与 String独立不同类型。换句话说,你不能在需要String的地方使用[String],也不能在需要[String]的地方使用String

    参数(如 handle)或输入对象字段(如 eq)只有一个 GraphQL 类型。如果将变量用作参数的值,则其类型必须与该参数的类型匹配。看来eq 的类型为String!(非空字符串),因此您只能传递一个String,而不是列表。

    是否存在基于值数组进行查询的方法取决于服务器实现。一些模式支持这样做的方法(例如,可能有一个接受列表的in 字段而不是eq)。但是,这是特定于模式的。查看您正在使用的服务器/框架/库的文档,或使用可用的 GraphiQL 或 GraphQL Playground 界面探索架构。

    【讨论】:

      猜你喜欢
      • 2019-04-11
      • 2019-07-29
      • 2019-12-03
      • 2019-12-23
      • 2020-06-20
      • 2022-01-21
      • 2021-01-06
      • 2019-05-17
      • 2023-03-12
      相关资源
      最近更新 更多