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

MUI v5中如何在BottomNavigationAction内正确使用StyledBadge作为图标?

MUI v5 BottomNavigationAction 集成 StyledBadge 解决方案

报错原因

MUI v5 调整了BottomNavigationAction组件icon属性的校验规则,要求传入可执行的组件类型(函数组件/类组件),而非已经实例化完成的JSX元素对象。你之前直接传入<StyledBadge>标签属于已渲染的JSX对象,不符合类型要求,因此触发type is invalid的报错。

正确实现方式

最简修改方案

直接将原有图标逻辑包裹为匿名函数组件传入icon属性即可,原有其他配置不需要改动:

<BottomNavigationAction 
  label="Appointments" 
  icon={() => (
    <StyledBadge badgeContent={numberOfUnreadAPPTS.toString()} overlap="circular">
        <ApptsIcon />
    </StyledBadge>
  )}
  classes={{
    root: classes.actionItemStyles,
    selected: classes.selected
  }}
  disabled={!AppState.netWorkIsOnline}
/>

可复用封装方案

如果多处需要使用带徽章的底部导航图标,可以单独封装为公共组件复用:

// 封装通用带徽章的图标组件
const BadgedIcon = ({ badgeContent, children, ...badgeProps }) => (
  <StyledBadge badgeContent={badgeContent.toString()} {...badgeProps}>
    {children}
  </StyledBadge>
)

// 业务侧调用
<BottomNavigationAction 
  label="Appointments" 
  icon={() => (
    <BadgedIcon badgeContent={numberOfUnreadAPPTS} overlap="circular">
      <ApptsIcon />
    </BadgedIcon>
  )}
  // 其他属性正常配置
/>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:15:04