【发布时间】:2021-04-21 18:03:21
【问题描述】:
我的UI 上有一个Menu,我试图实现的是provide an optional hiding 为每个指定的menu item,所有这些都基于登录用户role。
在我的Menu 组件中,通过MenuItems 进行迭代并根据它们的item.Hide 属性显示/隐藏它们:
菜单项数组MenuItems[]的结构如下:
const MenuItems[] = [
{
label: ''
icon: ''
hide: showOrHideByUserRole(userRole, ItemIDs.search) // I added this property
},
{
label: ''
icon: ''
hide: showOrHideByUserRole(userRole, ItemIDs.about) // I added this property
},
{
*etc*
}
]
当然有ItemIDs enum,它只为特定的item name(字符串)提供id。还有userRole 状态。
这是我关心的showOrHideByUserRole 函数:
function showOrHideByUserRole(roleName:string, itemID: number){
switch (itemID) {
case 1:
if(roleName === 'AAA')
return false;
else if(roleName === 'BBB')
return false;
else
return true;
case 2:
if(roleName === 'AAA')
return true;
else if(roleName === 'BBB')
return false;
else
return true;
case 3:
if(roleName === 'AAA')
return false;
else if(roleName === 'BBB')
return false;
else
return true;
case 4:
if(roleName === 'AAA')
return false;
else if(roleName === 'BBB')
return false;
else
return true;
case 5:
if(roleName === 'AAA')
return false;
else if(roleName === 'BBB')
return false;
else
return true;
default:
return true;
}
}
如您所见,这看起来有点丑(至少对我来说?),我想知道是否有更漂亮/更好的方法来做我想做的事?
需要考虑的是未来的扩展role-wise。这意味着未来可能会有更多角色。
【问题讨论】:
-
@RobertTerrell 我有一个错字,但我在几分钟前编辑了它。不确定你是否在谈论这个。请再次检查并澄清?
-
了解我提供了我认为非常可靠的选择,并为扩展角色留出了空间
标签: javascript reactjs switch-statement