Имя аргумента переменной Apollo GraphQL - PullRequest
0 голосов
/ 27 марта 2020

Фон: Я построил сетку данных с редактированием ячеек на внешнем интерфейсе. Каждый раз, когда вы редактируете поле в ячейке, оно мгновенно обновляется на сервере. Поэтому я подумал, что будет хорошей практикой - указывать только одно поле в моей мутации. Это уменьшит размер сетевого трафика c, а бэкэнд обработает обновление быстрее (конечно, это все на очень высоком уровне оптимизации).

Это означает, что аргумент, который я посылаю с моей мутацией GraphQL, является переменным , Вы можете очень красиво ввести значения аргументов через переменные GraphQL, но каков хороший способ для ключей?

Чтобы визуализировать проблему, это то, что я бы wi sh для:

mutation($id: 1, $field: "first_name", $value: "John") {
    updateClient(
        id: $id,
        $field: $value
    ) {
        id
    }
}

1 Ответ

2 голосов
/ 27 марта 2020

Нет, к сожалению, имена аргументов не могут быть переменными в запросе. Соглашение состоит в том, чтобы использовать тип объекта ввода для мутаций, чтобы обойти эту проблему:

type Mutation {
    updateClient(id: ID!, input: ClientInput!): Client
}
input ClientInput {
    a: String
    b: Number
    …
}

(вместо updateClient(id: ID!, a: String, b: Number, …))

С этим шаблоном вы можете передать объект типа ClientInput для вашей мутации в качестве аргумента:

query(`mutation($id: ID!, $input: ClientInput!) {
    updateClient(id: $id, input: $input) {
        id
    }
}`, {id: 1, input: {["first_name"]: "John"}})

Я действительно sh имел некоторый синтаксис распространения аргументов в GraphQL, чтобы сделать это вложение ненужным.

...