【问题标题】:How to change value in object in array BehaviorSubject?如何更改数组 BehaviorSubject 中对象的值?
【发布时间】:2021-02-19 14:33:15
【问题描述】:

我有一个初始数据:const menuItems = [{id: 1, active: false}, {id: 2, active: false}]

  public menuSubject$ = new BehaviorSubject<MenuItem[]>(menuItems);
  public menu$ = this.menuSubject$.asObservable();

我尝试修改id: 1:

modify(id: number) {
   const menuItemsUpdated = this.menuSubject$.getValue().map((item) => {
      if(item.id === id) {
         return {...item, active: true};
      }
      return item;
   });

    this.menuSubject$.next(menuItemsUpdated);
}

我想知道使用 async getValue() 并将其推回是正确的方法吗?

【问题讨论】:

  • 没关系。更多 rxjs 方法是创建更新 $ 并将其与原始流合并以构建结果值,但在您的特定情况下,它只是解决相同问题的更复杂的方法
  • 你能分享一下这个描述的方法吗?
  • 我的代码修改了数组的所有项目。所以出了点问题
  • 它没有修改所有项目。你为什么认为会这样?
  • 这是一个很好的问题,几个月前我问了很多问题"RXJS - BehaviorSubject: proper use of .value"。您可能会发现一些有趣的答案。

标签: javascript angular typescript rxjs


【解决方案1】:

看起来还可以。我会做同样的事情?。

【讨论】:

  • 整个对象重新渲染时模板闪烁。那是缺点
猜你喜欢
  • 1970-01-01
  • 2020-09-01
  • 2018-07-31
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 2019-08-12
  • 1970-01-01
  • 2021-06-24
相关资源
最近更新 更多