【问题标题】:readQuery from cache results in Can't find field <field> on object undefined从缓存中读取查询导致在对象未定义上找不到字段 <field>
【发布时间】:2019-05-28 10:45:51
【问题描述】:

我开始使用 graphQL 和 apollo。我正在做一些简单的查询和突变,但是当我尝试从 apollo 缓存访问数据时,我不断收到“无法在未定义的对象上找到我的字段”,但是当使用 apollo chrome 插件时,它返回的数据是正确的。

登录到我的应用程序后,我运行一个从服务器获取用户对象的简单查询。它记录正确,我可以在查询和缓存下的 chome dev apollo 中看到我的用户数据在那里。

const ME_QUERY = gql`
query {
    me {
    _id
    username
    password
    exchanges {
        name
        active
        }
    }
}
`;

<Query query={ME_QUERY}>
  {({loading, error, data}) => {
    if (error) {
      return <Error error={error.message} />;
    }
    if (data) {
      console.log(data, 'data');
    }
    return <div>asdf</div>
  }}
</Query>

我已经包装了 Apollo,我可以在我尝试查询的组件中很好地记录客户端对象。我运行以下代码:

componentDidMount() {
    console.log(this.props.client.readQuery, 'propps');
    const  user = this.props.client.readQuery({
        query: gql`
{
  me {
    _id
    username
    password
    exchanges {
      name
      active
    }
  }
}
      `
});
console.log(user, 'user');

这会导致未捕获的错误:在对象未定义上找不到字段我我也尝试过添加变量,但没有帮助。

哪个对象未定义?知道为什么我的查询失败了吗?

【问题讨论】:

  • 在 readQuery 中的查询中添加单词 query 是否可以解决问题?

标签: react-apollo apollo-client


【解决方案1】:

您可能正在使用 Apollo Client > 2.5,它在本地处理状态。 阅读migration guide了解更多信息。

  • 使用默认客户端 resolver 解析您的本地状态
  • 使用cache.write 将默认数据写入缓存。这是导致崩溃的迁移部分。

【讨论】:

  • 您可能想评论为什么您认为这个答案不好。我遇到了同样的问题,我用这种方式解决了。
  • 我使用的是 Apollo Client 2.6.8
猜你喜欢
  • 2020-12-13
  • 2020-10-22
  • 2012-09-03
  • 2013-06-19
  • 1970-01-01
  • 2011-08-15
  • 2017-10-09
  • 2020-06-19
  • 2019-03-15
相关资源
最近更新 更多