我正在使用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})
}
}),
}),
});
这是我的signIn变异:
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,但它会在{“id”:“......”,“电子邮件”:“asdasds”,“name”:“ajdasdasd”,“jwt”中发出“在currentUser中丢失字段”的警告:令牌
它仍然没有将currentUser查询插入到props.client的ROOT_QUERIES中。
您对如何实现这一目标有所了解吗?
答案 0 :(得分:1)
最后,我实现了我的目标。这里使用的方法是:
第一种方法是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);
}