原代碼如下,多個按鈕的點擊操作,其中val是操作的按鈕的標志
const operationConst = {INSTALLAPP: 'installApp',STOPAPP: 'stopApp',HOME: 'home',CLEAR: 'clear'......
}
function moreOperation(val, list) {selectedList = list && list.length === 0 ? multipleSelection : list//卸載應用if (val === operationConst.UNINSYALLAPP) {unInstallAppDialogRef.value.visible = trueunInstallAppDialogRef.value.title = '卸載應用'unInstallAppDialogRef.value.list = selectedList}// 開啟應用if (val === operationConst.STARTAPP) {visibleStartAndStopAPPDialog.value = truestartAndStopAPPData.visible = truestartAndStopAPPData.phoneList = selectedListstartAndStopAPPData.title = '啟動應用'startAndStopAPPData.type = 'start'}//...........//還有很多if
}
上述代碼多個if,代碼過長,可以運用map去優化
優化1.0------------------------------------------------------------------------------------------------------------
//每個操作的map
const operationMap = new Map([
//前一個是標志,即val
//后面一個是處理的函數,抽出來放在useHook里去,最后一個是傳遞給函數的其中一個參數[operationConst.MIRROR, [openMirrorDia, mirrorDialogRef]],[operationConst.INSTALLAPP, [openInstallDia, installAppDialogRef]],[operationConst.UNINSYALLAPP, [openUninstallDia, unInstallAppDialogRef]],[operationConst.STARTAPP, [openStartDia, 'start']],//......省略后面
])//操作函數大大縮小代碼量
function moreOperation(val, list) {let map = operationMap.get(val)
//每個函數要傳遞兩個參數,第一個是operationMap的最后一個,第二個是selectedList,是固定的map[0](map[1], selectedList)
}
上述代碼雖然減小了代碼量,但是map語義性不明確,后期維護的時候,別人容易看不到
優化2.0版本----------------------------------------------------------------------------------------------------------
還沒有試驗運行對不對,但1.0版本試驗是成功的。主要是掌握這個思想
這樣把fn和params放一起,語義性更強!
const operationMap2={operationConst.MIRROR:{fn: openTenantMirrorDia,params :[mirrorDialogRef],operationConst.INSTALLAPP:{fn: openInstallDia,params :[installDialogRef]//省略其余多個......
}
function moreOperation(val, list) {if(val in operationMap1){let obj=operationMap2[val]obj['fn'](...obj[params])
}
優化2.0版本(第二種思路)------------------------------------------------------------------------------------------