Как использовать массив внутри переменной GraphQL Query - PullRequest
0 голосов
/ 22 сентября 2019

Я бы хотел использовать массив внутри переменной запроса 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="
    }
  }
}

1 Ответ

0 голосов
/ 22 сентября 2019

GraphQL поддерживает специальный тип List, представляющий массив определенного типа.Например, [String] - это список типа String.Несмотря на то, что [String] тип включает String, в GraphQL он считается отдельным , отличным типом от String.Другими словами, вы не можете использовать [String], где ожидается String, и вы не можете использовать String, где ожидается [String].

Аргумент (например, handle) или вводПоле объекта (например, eq) имеет только один тип GraphQL.Если в качестве значения аргумента используется переменная, ее тип должен соответствовать типу этого аргумента.Похоже, что eq имеет тип String! (ненулевая строка), поэтому вы можете передать ему только один String, а не список.

Существует ли способ запроса на основемассив значений зависит от реализации сервера.Некоторые схемы поддерживают способ сделать это (например, вместо eq, может быть поле in, которое принимает список).Однако это зависит от схемы.Просмотрите документ для используемого вами сервера / платформы / библиотеки или изучите схему, используя доступный интерфейс GraphiQL или GraphQL Playground.

...