Как называется операция реле? - PullRequest
0 голосов
/ 10 марта 2019

Я изучаю библиотеку Relay для GraphQL в приложении React. Я сделал все как в официальных документах. Мой /project/resources/js/schema.graphql имеет:

type usersPagination {
  """List of items on the current page"""
  data: [Users]

  """Number of total items selected by the query"""
  total: Int!

  """Number of items returned per page"""
  per_page: Int!

  """Current page of the cursor"""
  current_page: Int!

  """Number of the first item returned"""
  from: Int

  """Number of the last item returned"""
  to: Int
}

В моем React /project/resources/js/components/main/Table.js Я пытаюсь сделать запрос:

<QueryRenderer
    environment={environment}
    query={graphql`
        query usersPaginationQuery {
            data {
                Users
            }
        }
    `}
    render={({error, props}) => {
        if(error) {
            return <div>Error!</div>
        }
        if(!props) {
            return <div>Loading...</div>
        }

        return <div>User: {props.users.data.id}</div>;
    }}
/>

Затем я запускаю npm run relay, чтобы скомпилировать его, но он выдает ошибку:

Ошибка разбора: Ошибка: RelayFindGraphQLTags: Имена операций в graphql теги должны начинаться с имени модуля и заканчиваться на «Mutation», «Запрос» или «Подписка». Получил usersPaginationQuery в модуле Table. в "компоненты / главная / Table.js"

Для меня это чепуха, bcz мое имя запроса точно как ключевое слово module name + "Query". Спасибо за любую помощь.

Ответы [ 2 ]

1 голос
/ 10 марта 2019

Из документов :

Примечание. Чтобы включить режим совместимости, relay-compiler принудительно назначает запросу имя Query.

Это также обойдется в этой проблеме . Если ваш файл называется Table.js, то ваша операция должна быть TableQuery.

0 голосов
/ 11 марта 2019

В GraphQL имя операции - это имя сразу после ключевого слова query или mutation и перед первой открытой скобкой.Это произвольное имя, предоставляемое вызывающим абонентом, и не относится ни к чему в схеме.Первый выбор поля после первой открытой скобки - это поле типа Query или Mutation.

query OperationName {
  topLevelQuery {
    fieldOnItsType
    ... OtherFields
  }
}

Похоже, вы пытались использовать имя поля запроса верхнего уровняв слоте «имя операции».Так как он распознается как имя операции, он не выполняется как запрос верхнего уровня, и вы перебираете правила Relay относительно того, как он должен называться:

Имена операций в тегах graphql должныбыть префиксом с именем модуля и заканчиваться на «Mutation», «Query» или «Subscription»

Текущее имя модуля Table (потому что вы находитесь в файле Table.js),Таким образом, ваш запрос должен выглядеть примерно так:

query TableQuery {
  usersPaginationQuery {
    data {
      ... SomeFieldsOnUsers
    }
  }
}

Вы должны перечислить все поля в Users, которые вы хотите выбрать (при условии, что это тип объекта).Я использовал синтаксис GraphQL фрагмент здесь, потому что вы не показываете, что находится в этом типе, но вы не можете использовать здесь имя типа объекта напрямую.

...