Как переместить интерполяцию фрагментов списка полей за скобки - PullRequest
0 голосов
/ 26 февраля 2020

Вот макет текущего графа SQL, с которым я работаю.

const aDynamicListOfFieldsComingFromElsewhere = 'foo bar anotherField etc'

const query = gql`{
  QueryResult: TableName {
    Data {
      id
      name
      ${aDynamicListOfFieldsComingFromElsewhere}
    }
  }
}`

Это ... функционально говоря, работает. Но считается плохим подходом по нескольким причинам, одной из которых является поддержка lint, предоставляемая eslint-plugin-graphql.

Eslint дает мне подсказку, сообщая мне следующую ошибку:

Invalid interpolation - fragment interpolation must occur outside of the brackets  graphql/template-strings

Мне удалось найти несколько хороших примеров с переменными, но ни один из них не позволил включить внешне определенную переменную.

Заранее спасибо за помощь!

1 Ответ

1 голос
/ 13 марта 2020

Вы можете использовать директивы для этого. Спецификация для GraphQL: https://graphql.org/learn/queries/#directives

Запрос должен выглядеть следующим образом:

const query = gql`
  query QueryResult($withFoo: Boolean!, $withBar: Boolean!, $withAnotherField: Boolean!, $withEtc: Boolean!) {
    Data {
      id
      name
      foo @include(if: $withFoo)
      bar @include(if: $withBar)
      anotherField @include(if: $withAnotherField)
      etc @include(if: $withEtc)
    }
  }
`

А также переменные, которые должны быть переданы в ваш клиент GraphQL:

{
   withFoo: true, 
   withBar: true, 
   withAnotherField: false,
   withEtc: true
}
...