假设我有一个服务,它为任何想要获取某些数据的最新版本的组件提供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。