繁体   English   中英

Apollo GraphQL-如何从缓存存储中获取通过突变记录的数据?

[英]Apollo GraphQL - How to get data recorded by mutation from the cache store?

我正在使用React-Native开发一个应用程序,并在服务器端使用GraphQL作为REST。 我的应用程序中具有身份验证层,我想实现从服务器的变异查询中读取数据。

这是传递给props的signIn方法:

 const login = graphql(LoginMutation, { props: ({ mutate }) => ({ login: (user) => mutate({ variables: { email: user.email, password: user.password }, refetchQueries: [{ query: fetchShop }], update: (proxy, { data: { signIn } }) => { console.log("USSER : " + JSON.stringify(signIn)) const query = gql` { currentUser { id email jwt __typename } } `; try { proxy.writeQuery({ query: query, data: signIn }) } catch (error) { console.log("Error occured due to the followig error at write query : "+error) } //data.user.push(mutationResult.signIn); //proxy.writeQuery({query,data}) } }), }), }); 

这是我的登录突变:

import gql from 'graphql-tag';

export default gql`
mutation SignIn($email : String!,$password : String!){
    signIn(email : $email, password : $password){
        id
        email
        name
        jwt
    }
}
`;

我正在从React-Native库中将身份验证令牌保存在AsyncStorage中。 我想做的是从商店获取userInformation。 我从缓存存储中读取根查询没有任何问题。

我深入研究了Apollo-client提供的客户端道具。 我可以在其中看到用户数据。 它位于商店下某个名为ROOT_MUTATION的属性下。 (我可以分享道具数据)

我正在使用readQuery,但它对“ {中的currentUser中的缺少字段“ {” id“:”……..“,” email“:” asdasds“,” name“:” ajdasdasd“,” jwt“:token发出警告

它仍然不会将currentUser查询插入到props.client的ROOT_QUERIES中。

您对如何实现这个目标有想法吗?

最后,我实现了我的目标。 这是我使用的方法:

第一种方法是signIn突变:

 const login = graphql(LoginMutation, { props: ({ mutate }) => ({ login: (user) => mutate({ variables: { email: user.email, password: user.password }, refetchQueries: [{ query: fetchShop }], update: (proxy, { data: { signIn } }) => { console.log("USSER : " + JSON.stringify(signIn)) const query = gql` { user{ id email jwt __typename } } `; proxy.writeQuery({query : query , data : {user : signIn}}) } }), }), }); 

在代码的某个地方; 您可以通过以下方式从商店(在这种情况下为用户)读取数据:

 const { client } = this.props; console.log(client.store); try { const { user } = client.readQuery({ query: gql` { user{ id email name __typename } } ` }) console.log("User : "+JSON.stringify(user)) } catch (error) { console.log("Error occured at reading user from the cache due to the following err : " + error); } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM