首页 > 解决方案 > NGRX 实体状态更改导致其他切片更新

问题描述

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

状态:

export interface ComputerState extends EntityState<Computer> {
}

export interface PersonState extends EntityState<Person> {
}

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

以下 reducer 操作导致 person selector observable 发出一个新值:

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
)

有人对此有解决方案吗?

标签: angularrxjsngrxstate-managementngrx-entity

解决方案


你应该像这样编写你的减速器:

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

推荐阅读