我已经找到了所有可以找到的与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中是可行的,还是我只是为同一件事编写数百个查询?
答案 0 :(得分:0)
每个组件都需要尝试登录吗?
不是每个组件都不必重新登录,如果您查看apollo文档,我们可以看到它指出:
在安装查询组件时,Apollo Client将为我们的查询创建一个可观察对象。我们的组件通过Apollo客户端缓存订阅查询结果。
首先,我们尝试从Apollo缓存加载查询结果。如果不存在,我们会将请求发送到服务器。
一旦数据返回,我们将其标准化并将其存储在Apollo缓存中。由于Query组件订阅了结果,因此它以数据的方式进行更新。
因此,如果您下次提取用户凭据并将其存储在缓存中,那么当您下次获取该凭据时,它将来自缓存(如果不在缓存中,它将重新获取)。
https://www.apollographql.com/docs/react/essentials/queries.html