Разве государство не должно быть неизменным? - PullRequest
0 голосов
/ 18 января 2019

У меня есть следующий код:

Редуктор:

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, если я изменю значение из подписки магазина?

1 Ответ

0 голосов
/ 18 января 2019

в значительной степени ваша ответственность состоит не в том, чтобы сделать это, а в том, чтобы изменить состояние только в редукторах неизменным образом. если вы хотите убедиться, что такого рода мутации предотвращены, вы можете взглянуть на ngrx-store-freeze, Immutable или аналогичный ...

обычно вы используете store-freeze во время разработки, чтобы убедиться, что в вашем коде нет никаких мутаций (будь то компоненты или редукторы), а затем выключаете его в работе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...