阿波罗客户机:Can';是否将GraphQL查询作为JS变量传递&引用;不变冲突:应为已解析的GraphQL文档。”;

阿波罗客户机:Can';是否将GraphQL查询作为JS变量传递&引用;不变冲突:应为已解析的GraphQL文档。”;,graphql,apollo,apollo-client,vue-apollo,graphql-tag,Graphql,Apollo,Apollo Client,Vue Apollo,Graphql Tag,我正在使用vue apollo+vue属性装饰器。我可以像这样运行查询: get apollo () { return { rc_tags: { query: gql`{ <body of query> }` } } } 无论我是从另一个文件导入MYQUERY(如上面的示例所示),还是它是本地组件的属性,都没有关系,同样的错误。我可以将鼠标悬停在MYQUERY上,得到一个TypeScript提示,表明它是一个Docum

我正在使用vue apollo+vue属性装饰器。我可以像这样运行查询:

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

无论我是从另一个文件导入MYQUERY(如上面的示例所示),还是它是本地组件的属性,都没有关系,同样的错误。我可以将鼠标悬停在MYQUERY上,得到一个TypeScript提示,表明它是一个DocumentNode,但无论我做什么,如果不将完整的模板文本放入实际的
get apollo()
函数中,我都无法让它工作。

我很困惑,为什么作为组件属性的同一个gql查询会与内联定义它有所不同,直到我意识到
get apollo()
在组件创建()之前运行,更不用说挂载了()

这意味着组件上的所有数据属性在该点上都是未定义的,如果MYQUERY依赖于这些属性,它也将是未定义的,这就是gql抱怨的原因


我尝试引用组件属性的原因是为了计算要运行的“which”查询。如果您想做类似的事情,您需要注意的是,您只对创建组件之前可用的数据进行评估。

如果在getter中添加console.log(MYQUERY),控制台中的输出是什么?一旦页面已经加载,控制台中的输出看起来很好-但是,我正在引用组件的一个属性,当运行导致问题的
getapollo()
时,我意识到该属性不可用
  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?