有没有一种简单的方法可以使用Apollo Client 2.5 for React管理本地状态?与“ client.writeData”等效的“读取”是什么?

时间:2019-05-01 12:38:37

标签: reactjs apollo react-apollo apollo-client

我正在学习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中。

很显然,我没有看到树木茂盛的森林,欢迎任何建议。

1 个答案:

答案 0 :(得分:1)

您几乎拥有了它,只是忘了传递数据对象中的数据,而不是直接==>

client.writeData({数据:{isLoggedIn:false}});