0

从服务器获取结果时,通常我会在我的 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 像以前一样返回一个可扩展的对象?我的代码中有很多查询的用法,几乎所有的查询都像上面一样向结果中添加字段,所以这将是一个相当大的代码更改。此外,深拷贝会有轻微的性能问题。

谢谢!

4

1 回答 1

0

不要改变结果,只需fullName以不可变的方式更新。

于 2020-11-27T10:28:40.463 回答