【问题标题】:Getting "object is not extensible" when trying to add fields to result gql data objects after upgrading to Apollo client 2升级到 Apollo 客户端 2 后尝试向结果 gql 数据对象添加字段时出现“对象不可扩展”
【发布时间】: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 像以前一样返回一个可扩展的对象?我的代码中有很多查询的用法,并且在几乎所有查询中,我都向结果中添加了像上面这样的字段,所以这将是一个相当大的代码更改。另外,深拷贝会有轻微的性能问题。

谢谢!

【问题讨论】:

    标签: apollo-client apollo-angular


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-03
      • 2020-06-11
      • 2021-05-25
      • 2023-03-05
      相关资源
      最近更新 更多