在Angular 7中,使用NGRX时,当使用选择器订阅存储属性时被多次调用的问题通常是由于组件的变更检测机制引起的。解决这个问题的方法是使用distinctUntilChanged
操作符来阻止重复的调用。
以下是一个示例,演示如何使用distinctUntilChanged
操作符来解决该问题:
import { Component, OnInit } from '@angular/core';
import { Store, select } from '@ngrx/store';
import { distinctUntilChanged } from 'rxjs/operators';
@Component({
selector: 'app-my-component',
template: `
{{ data$ | async }}
`
})
export class MyComponent implements OnInit {
data$;
constructor(private store: Store) {}
ngOnInit() {
this.data$ = this.store.pipe(
select('data'),
distinctUntilChanged()
);
}
}
在上面的代码中,我们通过使用distinctUntilChanged
操作符来阻止重复的数据发射。这样,当存储属性的值发生变化时,只有当新值与上一个值不同时,订阅者才会被调用。
请注意,在上面的示例中,我们使用了select
方法来选择存储属性。你需要根据你的应用程序的具体情况来选择正确的存储属性。
希望这个解决方法对你有所帮助!