来自 store.select 的 Observable 似乎没有更新值

Observable from store.select doesn't seem to have updated values

我有一个 ApplicationStateproject 成员,我的 ProjectState 是这样的:

interface ProjectState {
   listObjs: SomeType[];
}

在我的 component.ts onInit 中,我有这样的东西:

...
this.objID = someString
...

this.listObj$ = 
this.store.select( state => state.project.listObjs.find( item => item.id === this.objID));
...

在我的减速器中,我正在像这样处理新状态的创建:

...
case (action.ACTION1): {

    const newState = {... state};
    const objIndex = state.listObjs.findIndex( item => item.id === action.payload.id )

    if ( objIndex === -1 ) {
        return state;
    }

    Object.assign(newState.listObjs[objIndex].someMember, {... action.payload.someData});

    return newState;
}
...

我在我的组件 onInit 中订阅了 listObj$,但它在初始化时得到服务,每当我对数组中的 obj 进行更改时,我没有看到 subscribe 得到更新数据

这是"direct"状态突变。

传播运算符 (...) 不克隆递归并且 Object.assign 变异 newState.listObjs[objIndex].someMember.

您可以在 ngrx v8 中安装 ngrx-store-freeze 或启用运行时检查,您将收到一个错误,您无法像这样修改状态。

要解决这个问题,你必须以不可变的方式创建一个新的状态,或者使用 immer。 Clean NgRx reducers using Immer