NGRX实体状态更改导致其他片更新

问题描述

我在同一状态片中有多个EntitySate。当我使用一个实体适配器更新时,其他EntityState的可观察到的选择器也会被触发,尽管选择器未访问更新的状态片。这是预期的行为吗?

状态:

export interface ComputerState extends EntityState<Computer> {
}

export interface PersonState extends EntityState<Person> {
}

export interface DataState {
    computer: ComputerState;
    person: PersonState;
}

以下reducer动作使可观察到的人员选择器发出新值:

on(Actions.updateComputerExample,(state,{ id }) => {
        return {
            ...state,computer: computeradapter.updateOne(
                { id: id,changes: { name: 'test' } },state.computer
            ),};
    }),

人员选择器:

export const selectPersons= createSelector(
    selectState,state=> state? personAdapter.getSelectors().selectAll(state.person) : null
)

有人对此有解决方案吗?

解决方法

您应该像这样对减速器进行编码:

on(Actions.updateComputerExample,(state,{ id }) => {
   return computerAdapter.updateOne(
      { id: id,changes: { name: 'test' } },{ ...state });
}),