Apollo 客户端本地状态 - LoggedIn 查询
Posted
技术标签:
【中文标题】Apollo 客户端本地状态 - LoggedIn 查询【英文标题】:Apollo Client Local state - LoggedIn Query 【发布时间】:2020-01-23 11:01:02 【问题描述】:我是使用 GraphQL 的新手。非常习惯使用 Redux,但考虑到新的需求,我已经开始在后端使用 GraphQL 以及用于本地状态管理的 apollo 客户端。我正在尝试实现一个“isLoggedIn”布尔值来确定用户在哪里登录。
根据我的阅读,这就是你的做法:
import withApollo from 'next-with-apollo';
import ApolloClient, InMemoryCache, gql from 'apollo-boost';
import typeDefs, resolvers from '../resolvers/index';
const cache = new InMemoryCache();
cache.writeData(
data:
User:
isLoggedIn: false,
email: "empty"
)
const IS_LOGGED_IN = gql`
query IsLoggedIn
User
isLoggedIn
`
`
export default withApollo(
( ctx, headers, initialState ) =>
new ApolloClient(
uri: "http://localhost:4000/auth/authorize",
cache: cache,
headers:
authorization: '',
typeDefs,
resolvers:
User :
isLoggedIn: (_, _args, cache) =>
const isLoggedIn = cache.readQuery(query: IS_LOGGED_IN);
return isLoggedIn;
));
我在状态初始化之前创建了一个缓存对象,这样我就可以写入我最初想要的值(loggedin = false)。
然后我写了一个查询IS_LOGGED_IN来查询状态。
然后我初始化 Apollo 客户端状态并为查询添加解析器。
我感觉自己犯了一个严重错误,但不确定是什么。我目前正在查看的错误是:
Missing field __typename in
"isLoggedIn": false,
"email": "empty"
【问题讨论】:
【参考方案1】:我的设置是错误的。按照这个家伙的设置,一切正常:https://www.youtube.com/watch?v=CnhHeSAAbRM
【讨论】:
以上是关于Apollo 客户端本地状态 - LoggedIn 查询的主要内容,如果未能解决你的问题,请参考以下文章
使用 Apollo 本地状态存储返回数据的不同表示是不是合适
使用 TypeGraphQL 在浏览器中为 Apollo 本地状态生成 typedef 和解析器