高速缓存中的readQuery结果在未定义的对象上找不到字段<field>

时间:2019-01-01 12:04:55

标签: react-apollo apollo-client

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

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

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>

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

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');

这会导致未捕获的错误:无法在对象未定义对象上找到我,我也尝试添加变量,但这无济于事。

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

1 个答案:

答案 0 :(得分:0)

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

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