Angular ngrx存储选择仅订阅特定操作

Angular ngrx存储选择仅订阅特定操作,angular,ngrx,redux-store,Angular,Ngrx,Redux Store,我想知道是否可以筛选store.select subscription by actions(就像我们在Effects中所做的那样)。请参阅下面的代码: this.store .select(mySelector) .subscribe(obj => { . //FILTER SUBSCRIPTION BY ACTION this.object = obj; }); 每次调度操作时(无论哪个操作),将调用具有store.select.subscribe的每个活动组

我想知道是否可以筛选store.select subscription by actions(就像我们在Effects中所做的那样)。请参阅下面的代码:

this.store
  .select(mySelector)
  .subscribe(obj => { . //FILTER SUBSCRIPTION BY ACTION 
    this.object = obj; 
  });
每次调度操作时(无论哪个操作),将调用具有store.select.subscribe的每个活动组件(未销毁和未取消订阅)

如果我们的应用程序有100个操作,则每次触发1个操作时,将调用所有活动组件(未销毁或取消订阅)store.select.subscribe。(如果影响组件的状态没有改变,我知道我们不会有任何问题,因为状态仍然不变)

我为什么问这个问题?

有时,每当影响组件的状态发生变化时,我都需要在组件中执行一些操作。所以,每次我需要执行if语句来检查对象是否已更改。如果我有一个操作过滤器,那么这个If语句就不再需要了,因为我过滤了订阅中影响组件的特定操作。请参阅下面显示此if语句的代码:

myObject: any; //global object of my component


  constructor(
    private store: Store<AppState>,
  ) {
    this.store
      .select(mySelector)
      .subscribe(obj => {
        if(obj.id !== myObject.id) //changed{
          this.myObject = obj;
          doSomeActionInMyComponent()
        } else {
          this.myObject = obj;
        }
      });
  }

  doSomeActionInMyComponent() {
      //do some action using this.myObject
  }
myObject:any//我的组件的全局对象
建造师(
私家店,
) {
这家商店
.选择(mySelector)
.订阅(obj=>{
if(obj.id!==myObject.id)//已更改{
this.myObject=obj;
doSomeActionInMyComponent()
}否则{
this.myObject=obj;
}
});
}
doSomeActionInMyComponent(){
//使用this.myObject执行一些操作
}
我的想法有道理,还是我误解了ngrx的概念?我应该使用其他类似效果的东西吗


提前感谢。

这是不可能的,选择器会对状态更改做出反应

我确实觉得有点奇怪,当你分派一个动作tho时,每个选择器都会发出一个新的结果。只有受状态更改影响的选择器才会发出新结果,这是因为在内部,选择器正在缓存输入,如果输入未更改,则不会执行

从:

使用createSelector和createFeatureSelector函数时@ngrx/store会跟踪调用选择器函数的最新参数。因为选择器是纯函数,所以在参数匹配时可以返回最后一个结果,而无需重新调用选择器函数。这可以提供性能优势,特别是对于执行昂贵计算的选择器。这种做法被称为备忘录

如果你有复制品,我很乐意看一看