Используйте переменные Graphql для определения полей

Я пытаюсь сделать что-то эффективное, подобное этому

`query GetAllUsers($fields: [String]) {
    users {
        ...$fields
    }
}`

Где мой клиент (в настоящее время Apollo для реагирования) затем передает массив полей в разделе переменных. Цель состоит в том, чтобы иметь возможность передавать массив для тех полей, которые я хочу вернуть, и интерполировать их в соответствующий запрос graphql. В настоящее время это возвращает синтаксическую ошибку GraphQL в $fields (ожидается {, но видит $). Это вообще возможно? Я подхожу к этому неправильно?

Еще один вариант, который я рассматривал, заключался в вызове функции JavaScript и передаче этого результата в query(), где функция делала что-то вроде следующего:

buildQuery(fields) {
    return gql`
        query {
                users {
                    ${fields}
                }   
        }`
}

Однако это кажется ненужным обходным путем.

нестандартные требования требуют обходных путей;) вы можете использовать фрагменты (для предопределенных наборов полей), но они не будут свободно детализированы ... переменные определенно не для определения запроса (но для переменных, используемых в запросе)

xadm 01.06.2019 19:44

К сожалению, мой страх ;). Ну что ж, не самый худший обходной путь. Спасибо!

pasquers 01.06.2019 20:15

FWIW, всегда есть решения, такие как эта библиотека.

Daniel Rearden 01.06.2019 21:06

@xadm, если вы отправите этот комментарий в качестве ответа, я проголосую за него

Daniel Rearden 01.06.2019 21:08

Вау, да, это значительно упрощает синтаксис. Спасибо!

pasquers 01.06.2019 21:10
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
2
5
411
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Резюме комментариев:

Нестандартные требования требуют обходных путей;)

Вы можете использовать фрагменты (для предопределенных наборов полей), но они, вероятно, не будут свободно детализированы (на уровне поля).

Переменные определенно не для определения запроса (но для переменных, используемых в запросе).


Предложение Дэниела: gql-построитель запросов


Похоже, что сообщество graphQL велико и полно людей, работающих над всеми возможными вариантами использования ... достаточно искать решения или спрашивать на SO;)

Другие вопросы по теме