从服务器获取结果时,通常我会在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返回像以前一样的可扩展对象?我在代码中使用了很多查询,在几乎所有查询中,我都向上述结果中添加字段,因此这将是一个相当大的代码更改。此外,深层复制将有一个轻微的性能问题。
谢谢!
答案 0 :(得分:0)
请勿更改结果,只需以不变的方式更新fullName
。