升级到 Apollo 客户端 2 后尝试向结果 gql 数据对象添加字段时出现“对象不可扩展”
Posted
技术标签:
【中文标题】升级到 Apollo 客户端 2 后尝试向结果 gql 数据对象添加字段时出现“对象不可扩展”【英文标题】:Getting "object is not extensible" when trying to add fields to result gql data objects after upgrading to Apollo client 2 【发布时间】:2020-12-05 20:00:48 【问题描述】:从服务器获取结果时,通常我会在我的 Apollo Angular 客户端中为对象添加额外的字段,以便以后使用,如下所示:
this.apollo.watchQuery<any>(query: gql`...`)
.valueChanges.pipe(
map(result =>
result.data.sites.forEach(s =>
s.fullName = `$s.parent.displayName - s.displayName`;
return result;
);
这曾经在 Apollo 客户端 1 上运行良好。现在我正在将我的代码升级到 Apollo 客户端 2 和最新的 apollo-cache-inmemory,但在尝试执行上述操作时出现错误: TypeError: 无法添加属性 fullName,对象不可扩展
我意识到我可以制作对象的深层副本并且可以解决,但为什么会发生这种变化?有没有办法让 Apollo 像以前一样返回一个可扩展的对象?我的代码中有很多查询的用法,并且在几乎所有查询中,我都向结果中添加了像上面这样的字段,所以这将是一个相当大的代码更改。另外,深拷贝会有轻微的性能问题。
谢谢!
【问题讨论】:
【参考方案1】:不要改变结果,只需以不可变的方式更新fullName
。
【讨论】:
以上是关于升级到 Apollo 客户端 2 后尝试向结果 gql 数据对象添加字段时出现“对象不可扩展”的主要内容,如果未能解决你的问题,请参考以下文章
Apollo GraphQL 客户端查询返回自省结果而不是数据
如何部署到 Apollo Graphql 服务器和客户端到生产环境?