原先的結構是不斷的寫if/else,而後經過先符合條件如何進行返回,代碼難以理解,而且大量的權限重複判斷。less
/* * 判斷是否能回放,權限判斷複雜的都定義爲函數,另外須要判斷的其餘外界條件建議封裝爲一個對象 */
const canPlay = (lessonState)=>{return profile[519] && lessonState === 5}
/* * 按鈕操做字典,顯示按鈕的順序按照下面的順序排列 */
const optDict=[{
name:'編輯課時',
key:1,
fn:editFn,
priv:profile[519]
},{
name:'錄播回訪',
key:2,
fn:playFn,
priv:canPlay()
},{
name:'順延課程',
key:4,
fn:delayFn,
priv:profile[533]
}]
/* * 權限判斷的過濾方法 */
const optDictFiltered = (optDict)=> return optDict.filter(opt => opt.priv)
const render = (optMenu)=>{
let OPERATION = null;
if(optMenu.length === 0){
return OPERATION
}
if(optMenu.length === 1){
let menu = optMenu[0]
OPERATION = <button onClick={menu.fn}>{menu.name}</button>
return OPERATION
} else {
let menu = optMenu[0];
optMenu.unshift();
let extraMenu = (
<Menu> optMenu.map(item=><Menu.item key={item.key} >{item.name}</Menu.item) </Menu> ); OPERATION = <dropdownbutton onClick={menu.fn} overlay={extraMenu}> {menu.name}</dropdownbutton> } return OPERATION } //最終使用 render(optDictFiltered(optDict)) 複製代碼