установить переменную $ для имени аргумента (НЕ ЗНАЧЕНИЕ АРГУМЕНТА) в graphql - PullRequest
0 голосов
/ 07 июня 2018

Я использовал Apollo в ReactNative Project

Я хочу получить некоторые продукты с сервера с компонентом Query в ApolloClient, моя схема запроса выглядит примерно так

 products(isExisting:true) {
    id
    name
  }

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

products(minPrice:$price)
   id
   name
 } 

теперь я хочу создать программу для условного выбора между 2 аргументами, в плоскости [A] использовать (isExisting) arg и в плоскости [B]use (minPrice)

мое первое и глупое решение - создать 2 разных компонента запроса, это любой другой способ, например, установить переменную для таких аргументов, как

 products($choose:$value)   

также я знаю о директивев GraphQL https://graphql.github.io/learn/queries/#directives

но я думаю, что это только для поля

и мое второе решение для разрешения этой переменной положить JavaScript в ``, как это

   render() {

      const arg = 'minPrice';

          return(
               <Query
                  variables={{ }}
                    query={gql`

                           query {
                              products(${arg}:100) {
                                 id
                                 name }

Я проверил это, работает хорошо для меня, но я хочу знать, что это хороший и лучший способ

1 Ответ

0 голосов
/ 07 июня 2018

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

 products(isExist:true) {
    name @include if(false/true)
 }

, это означает, что если условия возвращают True, вы получаете (name) поле, а если возвращаете False, (имя) поле не включено в ваш запрос

также вы можете эту директиву

 products(isExist:true) {
    name @skip if(false/true)
 }


     @include(if: Boolean) Only include this field in the result if the            argument is true.
      @skip(if: Boolean) Skip this field if the argument is true.
...