我正在学习Apollo Client 2.5的本地状态管理功能,并发现它相当混乱。对于它的价值,我能够很容易地理解Apollo Server,但这证明更加艰巨。
我(有点)理解当想要设置本地解析器和查询以读取本地状态时如何使用它,但是有一种方法可以简单地设置一些本地状态变量,因为Redux可以很容易地设置它。例如,在完成登录突变后将isLoggedIn
设置为true
吗?我尝试了此操作(在https://www.apollographql.com/docs/react/essentials/local-state之后)
return <Mutation mutation={LOGIN} onCompleted={data => {
if (data && data.login) {
const {login: {token}} = data
if (token) {
history.push('/list')
}
}
}}>
{(register, {data, error, loading, client}) => {
if (error) {
return <div>{error.toString()}</div>
}
if (loading) return <div>Loading...</div>
if (data && data.login) {
const {login: {token}} = data
if (token) {
localStorage.setItem('token', token)
client.writeData({isLoggedIn:true})
}
但出现错误
错误:写入结果以存储查询时出错: {“种类”:“文档”,“定义”:[{“种类”:“ OperationDefinition”,“操作”:“查询”,“名称”:{“种类”:“名称”,“值”:“ GeneratedClientQuery “},” selectionSet“:null}]} 无法读取null的属性“选择”
但是我不知道我是否正确使用了writeData
。更重要的是,如何读取数据? API中似乎没有相应的readData
调用。我是否需要设置GraphQL查询并运行该查询以查看用户是否已登录?然后,我需要为该查询创建一个解析器,并在构建Apollo Client时将其包括在内吗?
我看到一些使用apollo-link-state
的示例似乎更简单,但显然已弃用并包含在Apollo Client 2.5中。
很显然,我没有看到树木茂盛的森林,欢迎任何建议。
答案 0 :(得分:1)
您几乎拥有了它,只是忘了传递数据对象中的数据,而不是直接==>
client.writeData({数据:{isLoggedIn:false}});