GrahpQL: создание запросов с несколькими необязательными аргументами - PullRequest
0 голосов
/ 09 мая 2018

Используя apollo-client и graphql-tag Я пытаюсь создать запрос что-то вроде:

gql`
    {
        data(
            filter: ${options.filter}
            sort: ${options.sort}
            limit: ${options.limit}
            offset: ${options.offset}
        ) {
            name
        }
    }
`

Однако не все эти параметры установлены всегда, иногда я могу использовать только предел и смещение. Но если я оставлю их неустановленными, я получу Expected type Int, found undefined.

Должен ли я предварительно просмотреть свой объект параметров и поменять местами любые значения undefined с null? Или есть лучший способ структурировать это?

1 Ответ

0 голосов
/ 09 мая 2018

Вам следует избегать использования заполнителей для значений внутри запроса и использовать вместо них переменные. Таким образом, ваш запрос теперь будет выглядеть примерно так:

const MY_QUERY = gql`
  query MyQuery($filter: String, $sort: String, $limit: Int, $offset: Int) {
    data (
      filter: $filter
      sort: $sort
      limit: $limit
      offset: $offset
    ) {
      name
    }
  }
`

Примечание: типы, которые вы определяете для своих переменных, должны соответствовать вашей схеме для аргументов фильтра, сортировки, ограничения и смещения.

Теперь вы можете передавать переменные при рендеринге вашего Query компонента:

<Query query={MY_QUERY} variables={{ limit: 10, offset: 20 }}>
  {({ loading, error, data }) => {
    // ...
  }}
</Query>

Или, используя HOC:

graphql(MY_QUERY, { options: (props) => ({ variables: { limit: 10, offset: 20 } }) }

Или используя клиент напрямую:

client.query ({запрос: MY_QUERY, переменные: {предел: 10, смещение: 20}})

Если какая-либо из переменных не определена, они будут проигнорированы, и вам не придется больше ничего делать.

...