从其他查询访问数据?

时间:2018-07-11 02:01:08

标签: graphql apollo react-apollo

我已经找到了所有可以找到的与auth相关的GraphQL教程,但是我仍然无法真正解决这个问题。

如果在我的Auth组件中,我将查询令牌和用户凭据,如下所示:

const LOGIN_MUTATION = gql`
  mutation LoginMutation($email: String!, $password: String!) {
    login(email: $email, password: $password) {
      token
      user {
        name
      }
    }
  }
`

如何在另一个组件中访问此数据?每个指南似乎都说我将需要用户数据的每个组件包装在另一个<Query>元素中,因此每个组件都需要尝试登录吗?

使用Redux,我可以将其添加到商店中,而每次需要用户名时,都可以使用mapStateToProps来获取它而无需查询服务器。这在Apollo中是可行的,还是我只是为同一件事编写数百个查询?

1 个答案:

答案 0 :(得分:0)

  

每个组件都需要尝试登录吗?

不是每个组件都不必重新登录,如果您查看apollo文档,我们可以看到它指出:

  • 在安装查询组件时,Apollo Client将为我们的查询创建一个可观察对象。我们的组件通过Apollo客户端缓存订阅查询结果。

  • 首先,我们尝试从Apollo缓存加载查询结果。如果不存在,我们会将请求发送到服务器。

  • 一旦数据返回,我们将其标准化并将其存储在Apollo缓存中。由于Query组件订阅了结果,因此它以数据的方式进行更新。

因此,如果您下次提取用户凭据并将其存储在缓存中,那么当您下次获取该凭据时,它将来自缓存(如果不在缓存中,它将重新获取)。

  

https://www.apollographql.com/docs/react/essentials/queries.html