Можно ли использовать переменную для выбора полей? - PullRequest
0 голосов
/ 31 января 2019

Итак, у меня есть эта функция шаблона, как показано ниже.

Я хотел бы передать электронное письмо, и некоторые элементы получают информацию об этом электронном письме пользователя.

Переменная $email работает, однако яне могу заставить его принять вторую переменную для списка элементов.

const getUser = (email, items = ['email']) => ({
  query: `
    query ($email: String!, $items: [String]) {
      allUsers(condition:{ email: $email }) {
        edges {
          node {
            $items
          }
        }
      }
    }
  `,
  variables: {
    email,
    items,
  },
});

Как я могу динамически передать список элементов для запроса, который нужно вернуть?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Единственный способ перевести переменные в поля - это использование директив @skip и @include. Например, :

query MyQuery($image: Boolean!) {
  pokemons(first: 10) {
    name
    image @include(if: $image)
  }
}

Здесь поле image будет включено только в том случае, если переменная image истинна, и пропущено, если переменная ложна.Директива @skip работает так же, но работает в обратном порядке.Это не является устойчивым для большого количества полей, но это единственный встроенный способ сделать то, что вы пытаетесь достичь.

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

0 голосов
/ 31 января 2019

Поскольку сам запрос является строкой (шаблона), вы можете попробовать как:

const getUser = (email, items = ['email']) => ({
  query: `
    query ($email: String!, $items: [String]) {
      allUsers(condition:{ email: $email }) {
        edges {
          node {
            ${items}
          }
        }
      }
    }
  `,
  variables: {
    email,
    items,
  },
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...