Что здесь означает прямая мутация в случае редукции?
Это означает, что если ваш редуктор изменяет состояние и возвращает его:
function myReducer(state, action) {
this.state.someState = 2
return state
}
тогда Redux не будет думать, что произошло изменение, потому что возвращаемое значение ссылается на предыдущее состояние. Редуктору необходимо вернуть новое значение.
что может быть побочным эффектом мутации или асинхронного поведения
Побочный эффект мутации выглядит так:
function myReducer(state, action) {
this.state.someState = 2
return { someState: this.state.someState + 1 }
}
Несмотря на то, что было возвращено новое значение, предыдущее состояние было изменено на место. В результате, если вы time-travel-debug вернетесь в предыдущее состояние, вы не увидите его фактическое значение, а вместо этого 2
.
Пример асинхронного c побочный эффект:
function myReducer(state, action) {
return new Promise(res => {
return state + 2;
})
}
Любое асинхронное c поведение в вашем редукторе приведет к тому, что он вернет обещание, которое будет отображаться в состоянии и, вероятно, будет недопустимыми данными для ваших компонентов.