【问题标题】:NGRX Entity State changes causes other slices to updateNGRX 实体状态更改导致其他切片更新
【发布时间】:2020-10-21 06:23:25
【问题描述】:

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

状态:

export interface ComputerState extends EntityState<Computer> {
}

export interface PersonState extends EntityState<Person> {
}

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

以下 reducer 操作导致人员选择器 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
)

有人对此有解决方案吗?

【问题讨论】:

  • “selectState”是什么样的?
  • export const selectState= createFeatureSelector('xxxx'); xxxx 代表我的状态常数

标签: angular rxjs ngrx state-management ngrx-entity


【解决方案1】:

你应该像这样编写你的 reducer:

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

【讨论】:

  • 这个不行,因为updateOne的第二个参数只接受计算机实体状态。 ...state 将是整个州。
  • 如果是电脑的reducer,那么它永远不应该是整个状态。
  • 我在同一个状态下有多个实体状态 -> 在问题所示的情况下,reducer 是用于计算机和人的
  • 有点类似于:medium.com/capital-one-tech/…,但就像我在问题中所说的那样,我的选择器有问题。
猜你喜欢
  • 2022-06-18
  • 2018-10-16
  • 2019-04-30
  • 1970-01-01
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
  • 2016-03-01
相关资源
最近更新 更多