为什么你需要使用 Apollo 的 graphql-tag

Cri*_*iss 3 vue.js graphql apollo-client graphql-tag

根据一些教程和示例,我将 GraphQL API 集成到一个简单的 Vue 应用程序中。我正在使用 Apollo 与 API 和 graphql-tag 提供的模板文字进行交互来编写查询,如下所示:

gql`
    query getUser($userId: ID) {
        user(id: $userId) {
            name,
            email
        }
    }
`
Run Code Online (Sandbox Code Playgroud)

但是,我不太明白 graphql-tag 包的必要性。据我了解,这个包将查询转换为 AST,但是在前端这样做的目的是什么,为什么需要 graphql-tag 包来做到这一点?GraphQL 查询不能按原样发送到服务器吗?

Dan*_*den 5

查询本身可以发送到服务器,而不会变成DocumentNode对象。但是,Apollo不仅向您的服务器发送查询。它实现了许多附加功能,包括响应的规范化缓存。为了缓存工作,我们需要将提供的查询解析为机器可读的格式。例如,通过这样做,我们可以知道所有这些查询实际上是等效的,如果我们已经有了数据,就可以从缓存中获取:

{
  foo
  bar
}

query SomeOperationName {
  foo
  bar
}

query { foo bar }

{
  bar
  qux: foo
}
Run Code Online (Sandbox Code Playgroud)