使用BehaviorSubject处理复杂数据的更改
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用BehaviorSubject处理复杂数据的更改相关的知识,希望对你有一定的参考价值。
假设我有一个服务,它为任何想要获取某些数据的最新版本的组件提供BehaviorSubject
。
export class DataService
private messageSource = new BehaviorSubject<Data>(this.data);
currentMessage = this.messageSource.asObservable();
export class Component implements OnInit
message:Data;
constructor(private data: DataService)
ngOnInit()
this.data.currentMessage.subscribe(
message =>
this.message = JSON.parse(JSON.stringify(message))
)
数据很复杂:
class Data
id:number
prop1:string
prop2:Array<prop1:number, prop2:string>
数据随时间而变化,组件仅关注最新版本的数据。我的问题是:当组件收到通知时,组件如何知道数据的确切变化?
例如,假设prop2
中只有一个项目的一个字段发生了变化。每个组件都会获得新数据,但他们不知道究竟发生了什么变化。知道改变了什么将为渲染优化提供许多机会。
是否有使用BehaviorSubject执行此操作的内置方法?该组件是否应该在收到通知后找出差异?这通常是怎么做的?
这不是Subjects
关心其有效载荷类型的工作,更不用说属性已经改变了。
diff
对象还有其他工具,例如:你可能想检查reduce图书馆的lodash
,它可以满足你的需要。如果你在网上或在Stackoverflow上搜索deep diff
,你会发现更多关于这个问题的信息。
关于您的特定问题,您可以将最新的Data
存储在您的组件中,并且每次通过您的主题收到一个新的Data
时,您可以使用您选择的工具进行区分,应用您的更改并使用最新的qazxswpoi覆盖存储的qazxswpoi。
以上是关于使用BehaviorSubject处理复杂数据的更改的主要内容,如果未能解决你的问题,请参考以下文章
Angular 6 BehaviorSubject 使用 LocalStorage
使用裸 RxSwift 和 BehaviorSubject 同步模型
找不到模块 'rxjs/subject/BehaviorSubject'