鍍金池/ 問答/網(wǎng)絡(luò)安全  HTML/ [CONSTANTS.REPORT_CATEGORY_LIST]:(state,

[CONSTANTS.REPORT_CATEGORY_LIST]:(state, action)這種寫法怎么理解?

const ACTION_HANDLERS = {
    [CONSTANTS.REPORT_CATEGORY_LIST]:(state, action) => {
        const reportCategories = action.payload;

        //讓分類列表為空,需要傳遞一個空數(shù)組.
        if(!!reportCategories){
            return Object.assign({},state, {reportCategories:action.payload});
        }

    }
}

const initialState = {
    reportCategories:[],
    openedReportCategoryId:null,
};

export default function appReducer(state = initialState, action) {
    const handler = ACTION_HANDLERS[action.type];
    return handler ? handler(state, action) : state;
}
回答
編輯回答
兮顏

CONSTANTS.REPORT_CATEGORY_LIST是個symbol

2017年7月17日 07:03
編輯回答
枕頭人

這是ES6 Object literals的一個叫做Computed property keys的新特性。一般來說定義一個Object時,屬性的名字是確定的,而這里是個變量,也就是是在對象生成的時候才能得出的。
在你的例子中假如 CONSTANTS.REPORT_CATEGORY_LIST = 'report', 那么這個ACTION_HANDLERS就相當于:

const ACTION_HANDLERS = {
   report : (state, action) => {
     ... 
   }
}

使用這種[], 就上面的例子還有一種寫法是:

const ACTION_HANDLERS = {
   [CONSTANTS.REPORT_CATEGORY_LIST](state, action) {
     ... 
   }
}
2018年4月29日 05:22