ApolloClient: Не можете передать запрос GraphQL как переменную JS? «Нарушение инварианта: ожидание разобранного документа GraphQL». - PullRequest
0 голосов
/ 07 марта 2020

Я использую vue -apollo + vue -property-decorator. Я могу нормально выполнять запросы вот так:

  get apollo () {
    return {
      rc_tags: {
        query: gql`{ <body of query> }`
      }
    }
  }

Но если я попытаюсь использовать свойство компонента для запроса, например, из файла

  MYQUERY = gql`{ <body of query> }`


  get apollo () {
    return {
      rc_tags: {
        query: MYQUERY
      }
    }
  }

, то Я получаю сообщение об ошибке:

Invariant Violation: Expecting a parsed GraphQL document. 
Perhaps you need to wrap the query string in a "gql" tag?

Не имеет значения, импортирую ли я MYQUERY из другого файла, как в примере выше, или это свойство локального компонента, та же ошибка. Я могу навести курсор мыши на MYQUERY и получить подсказку TypeScript о том, что это DocumentNode, но независимо от того, что я делаю, я не могу заставить его работать без помещения полного литерала шаблона внутри фактической функции get apollo ().

1 Ответ

0 голосов
/ 08 марта 2020

Я был озадачен тем, почему тот же самый запрос gql как свойство компонента будет отличаться от его встроенного определения, пока я не понял, что get apollo() запускается до создания компонента (), не говоря уже о mount () ,

Это означает, что все свойства данных в компоненте на данный момент не определены, и если MYQUERY полагается на эти свойства, они тоже будут неопределенными, поэтому жаловалась gql.

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

...