Массив объектов превращается в объект объектов, когда я использую Apollo - PullRequest
0 голосов
/ 05 декабря 2018

В нашем проекте мы используем клиент Apollo для отправки запросов в GraphQL.Странно, но он конвертирует переменные в объект объектов.

let variables = [{myField: "myVal"}];
graphql.mutate("mutate myFunction($data:[MyInputType]){
    myFunction(myArg: $data){...blabla...}
}", variables);

Когда я запускаю мутацию и проверяю заголовки запроса, я вижу, что мои переменные конвертируются в объект объектов.

{"0": {"myField": "myVal"}}

Этот метод заставляет переменные быть объектом по умолчанию?Можно ли отправить массив объектов в качестве параметра с помощью GraphQL?

1 Ответ

0 голосов
/ 05 декабря 2018

При выполнении запроса GraphQL ожидает, что variables будет объектом, ключом которого является имя переменной, а значением является соответствующее значение переменной.Каждая переменная, используемая в документе (весь отправляемый вами запрос), должна быть объявлена ​​рядом с определением операции для документа.Например, если у вас есть переменная с именем firstName, которая была String:

mutation SomeOperationName ($firstName: String) {
  # your mutation here
}

Вы можете включить любое количество переменных:

mutation SomeOperationName ($firstName: String, $lastName: String, points: Int)

Переменные также могут быть списками:

mutation SomeOperationName ($names: [String], points: Int)

Однако во всех этих случаях значение для variables, которое вы передаете mutate, все равно должно быть объектом:

{
  names: ['Bob', 'Susan'],
  points: 12,
}

В вашем примере выВы определили только одну переменную data, которую, как вы сказали, GraphQL имеет значение List из MyInputType.Вы не можете передать myField как переменную, потому что вы не сказали GraphQL, что переменная существует.Однако, если myField является полем для MyInputType, то ваш variables просто должен выглядеть следующим образом:

{
  data: [
    {
        myField: 'someValue'
    },
    {
        myField: 'someOtherValue'
    },
  ],
}
...