从缓存中读取查询导致在对象未定义上找不到字段 <field>
Posted
技术标签:
【中文标题】从缓存中读取查询导致在对象未定义上找不到字段 <field>【英文标题】:readQuery from cache results in Can't find field <field> on object undefined 【发布时间】: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
是否可以解决问题?
【参考方案1】:
您可能正在使用 Apollo Client > 2.5,它在本地处理状态。 阅读migration guide了解更多信息。
使用默认客户端resolver
解析您的本地状态
使用cache.write
将默认数据写入缓存。这是导致崩溃的迁移部分。
【讨论】:
您可能想评论为什么您认为这个答案不好。我遇到了同样的问题,我用这种方式解决了。 我使用的是 Apollo Client 2.6.8以上是关于从缓存中读取查询导致在对象未定义上找不到字段 <field>的主要内容,如果未能解决你的问题,请参考以下文章
在“nsstring *”类型的对象上找不到读取字典元素的预期方法
Thymeleaf:对象中的对象,无法像jsp那样访问值?属性或字段 - 在 null 上找不到
ColorBox iframe - 在服务器上找不到请求的 url /未定义
Apollo-client - 错误:在对象 (ROOT_QUERY) 上找不到字段 allLinks()
未找到结果时如何从 Mongoose Find 查询返回自定义消息而不是空数组
Apollo-client (react) - 更新创建突变 - “在对象 (ROOT_QUERY) 上找不到字段 Fund()”