Почему мое состояние не определено?

#javascript #ecmascript-6

#javascript #ecmascript-6

Вопрос:

Ниже приведен синтаксис es5

 function customMsg(state, action) {
     state = state || {};
    return $.extend({}, state, {
       isFetching: false,
        didInvalidate: false,
        checkStatus: checkStatus(state.checkStatus, action)
     });
}

function checkStatus(state, action) {
    state = state || {
        isFetching: false,
        didInvalidate: false,  
        type: "room"
    };
        return state;
    }
}
  

Ниже приведен синтаксис es6

 const initialStae = {
    isFetching: false,
    didInvalidate: false,
    checkStatus: checkStatus(state.checkStatus, action)
}

function customMsg(state = initialStae, action) {
    return state;
}

function checkStatus(state, action) {
    state = state || {
        isFetching: false,
        didInvalidate: false,  
        type: "room"
    };

    return state;
}
  

Почему в моей строке 7 будет отображаться «состояние не определено» из es6?

 customMsgReducer.js:36Uncaught ReferenceError: state is not defined(…)
  

Комментарии:

1. mailContent: mailContent(state.mailContent, action) state здесь должно быть не определено

2. Не могли бы вы, пожалуйста, добавить полное сообщение об ошибке, которое вы получаете.

3. @aBloomer ваше state все еще не определено на момент определения initialStae

4. @aBloomer вы можете получить доступ к состоянию redux только внутри функции reducer / actions и mapStateToProps

Ответ №1:

В ES5 вы определяете, state = state || {}; а затем получаете доступ state.checkStatus . Отсюда и его работа.

 function customMsg(state, action) {
     state = state || {};
    return $.extend({}, state, {
       isFetching: false,
        didInvalidate: false,
        checkStatus: checkStatus(state.checkStatus, action)
     });
}
  

Но в ES6 вы получаете доступ state.checkStatus без определения того, state что undefined находится здесь. Следовательно, доступ к checkStatus of undefined выдает ошибку.