You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MUI组件权限控制问题:布尔值使用异常致按钮禁用逻辑失效

问题分析与解决

报错核心原因

你在Link的className属性里写的Authenticate.level != 'admin' ? check=false:check=true是赋值语句,执行后返回的是布尔值,但className只接受字符串、undefined这类有效值,布尔值不符合类型要求,所以触发红线报错。而且这种在JSX属性里直接赋值变量的写法本身逻辑混乱,不符合代码规范。

正确写法

先提前计算好控制禁用状态的变量,再把它传给ListItem的disabled属性,同时删掉Link里那个错误的className赋值:

const Authenticate = useSelector(userSelector);
// 直接计算是否禁用:非admin用户则禁用按钮
const isDisabled = Authenticate.level !== 'admin';

<Link href="/stock" passHref>
  <ListItem
    button
    className={router.pathname === "/stock" ? "Mui-selected" : ""}
    disabled={isDisabled}
  >
    <ListItemIcon>
      <Layers />
    </ListItemIcon>
    <ListItemText primary="Stock" />
  </ListItem>
</Link>

额外需求:直接隐藏按钮(而非仅禁用)

如果需要给非admin用户直接隐藏整个Stock按钮,用条件渲染即可:

const Authenticate = useSelector(userSelector);
const isAdmin = Authenticate.level === 'admin';

{isAdmin && (
  <Link href="/stock" passHref>
    <ListItem
      button
      className={router.pathname === "/stock" ? "Mui-selected" : ""}
    >
      <ListItemIcon>
        <Layers />
      </ListItemIcon>
      <ListItemText primary="Stock" />
    </ListItem>
  </Link>
)}

内容的提问来源于stack exchange,提问作者okmmy123456

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 02:10:16