angular - 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
)
有人对此有解决方案吗?
解决方案
你应该像这样编写你的减速器:
on(Actions.updateComputerExample, (state, { id }) => {
return computerAdapter.updateOne(
{ id: id, changes: { name: 'test' } },
{ ...state });
}),