[CONSTANTS.REPORT_CATEGORY_LIST]:(state, action)这种写法怎么理解?

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

        //让分类列表为空,需要传递一个空数组.
        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;
}
阅读 2.5k
2 个回答

这是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) {
     ... 
   }
}

CONSTANTS.REPORT_CATEGORY_LIST是个symbol

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题