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);
}
我正在使用 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);
}