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

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

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

这是传递给道具的登录方法:

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 提供的客户端 props。我可以在那里看到用户数据。它在一些属性下叫ROOT_MUTATION的店里。 (我可以分享道具数据)

我正在使用 readQuery 但它会针对 "Missing field in currentUser in { "id" 发出警告:"........", "email":"asdasds","name":"ajdasdasd","jwt":代币

它仍然没有将 currentUser 查询插入到 ROOT_QUERIES 到 props.client。

你知道如何实现这个目标吗?

终于,我达到了目的。这里是我用过的方法:

第一种方法是登录突变:

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);
        }