我有一个简单的状态:

export interface ItemsState{
  items: Item[],
  otherItem: OtherItem,
}

const initialState: ItemsState= {
  items: [],
  otherItem: {} as OtherItem,
}


还有一个选择器:

const getItemFeatureState = createFeatureSelector<ItemsState>('items');

export const getItemValue= createSelector(
  getItemFeatureState,
  state => state.otherItem,
);


在我的组件中,我使用选择器:

 public item: Item  = {} as Item;

 constructor(private itemsStore: Store<fromItem.State>) {
    this.itemsStore.pipe(
      select(fromItem.getItemValue),
      distinctUntilChanged(),
    ).subscribe(item=> this.item = item);
}


但是当我通过做一些简单的事情来更新本地Item时:

this.item.value = someValue;


this.item.value将在ItemsState中更新,而不使用任何操作。

那怎么可能呢?

最佳答案

这是因为该项目共享相同的参考。如果您更新它,则商店中的商品也将被更新。

这不是您想要的。要在开发过程中发现这些“错误”,可以使用软件包ngrx-store-freeze来防止这种情况。

09-11 17:45