微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在尝试升级到Apollo客户端2后尝试添加字段以生成gql数据对象时,获取“对象不可扩展”

如何解决在尝试升级到Apollo客户端2后尝试添加字段以生成gql数据对象时,获取“对象不可扩展”

从服务器获取结果时,通常我会在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-memory,尝试执行上述操作时出现错误 TypeError:无法添加属性fullName,对象不可扩展

我意识到我可以复制对象的深层副本,并且可以解决问题,但是为什么会有这种变化?有没有办法使Apollo返回像以前一样的可扩展对象?我在代码中使用了很多查询,在几乎所有查询中,我都向上述结果中添加字段,因此这将是一个相当大的代码更改。此外,深层复制将有一个轻微的性能问题。

谢谢!

解决方法

请勿更改结果,只需以不变的方式更新fullName

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。