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

Я новичок в React & Redux, и меня смущает манипулирование состоянием в редукторах. В большинстве статей, документации я постоянно вижу, что состояния неизменны, и мы никогда не должны обновлять состояние. Мы всегда должны использовать ...state или object.assign в редукторах

Однако в известных уроках ( Cory House или в других местах (например, Здесь, на GitHub ) они обновляют состояние следующим образом:

var initialState = {
    numberOfAjaxCall: 0
}

const ajaxStatusReducer = (state = initialState.numberOfAjaxCall, action) => {
        if (action.type === AJAX_BEGIN_CALL) {
            return state + 1;
        }

        return state;
}

Почему эти коды не написаны так, как показано ниже?

var initialState = {
        numberOfAjaxCall: 0
    }

const ajaxStatusReducer = (state = initialState, action) => {
    if (action.type === AJAX_BEGIN_CALL) {
    return {
        ...state, 
        numberOfAjaxCall: state.numberOfAjaxCall + 1
        };
    }

return state;
}

Я хотел бы знать, неверен ли мой код или нет. Или я неправильно понял Redux & Reducers или не понимаю, как эти коды реализованы?

Не могли бы вы помочь мне прояснить эти стили кодирования?

1 Ответ

0 голосов
/ 03 апреля 2019

Первый пример не изменяет состояние - он возвращает новый номер.В этом случае редуктор отвечает только за одно число.

Если ваше состояние имеет форму, подобную приведенному вами примеру:

var initialState = {
    numberOfAjaxCall: 0
}

Редуктор ajaxStatusReducer отвечает за numberOfAjaxCall только.Вам все еще понадобится еще один редуктор для общего объекта состояния, который может выглядеть примерно так (простейший вариант, множество других способов написать это):

function reducer(state, action) {
    return {
        numberOfAjaxCall: ajaxStatusReducer(state.numberOfAjaxCall, action)
    };
}

Во втором примере вы комбинируете обаэти редукторы в одно.Оба варианта являются допустимыми, и это зависит от того, как вам нравится составлять ваш код / ​​редукторы в целом.

...