У меня есть следующий код:
Редуктор:
export function testReducer(state = [], action:TestActions):any[] {
switch (action.type) {
case TestAction1Success: {
return [...action.payload];
}
case TestAction2Success: {
return [ ...state, action.payload ];
}
case TestAction3Success: {
const list = state.map(x => {
if(x.id === action.payload.id){
return action.payload
}
return x;
})
return [ ...list ];
}
default: {
return state;
}
}
}
компонент:
ngOnInit() {
this.store.dispatch(new TestAction1()); // Fill store
this.list$ = this.store.select(selectList)
}
// this is a click binding to each element of this.list$ in the view
edit(listItem) {
listItem.name = "ASDASDASD" // this line also change the value in store if any action is called after this
this.store.dispatch(new TestAction2(listItem));
}
Это меняет хранилище, даже если в редуктор запрашиваются только «SuccessActions».
Я понимаю, почему состояние меняется. Это потому, что значение по умолчанию состояния всегда дается в редукторе. Но разве это не должно быть immutalbe, если я изменю значение из подписки магазина?