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

Material UI迁移到v5版本后useStyles(makeStyles)样式优先级降低问题

问题原因

Material UI v5 改用 Emotion 作为默认样式引擎,官方提供的 @mui/styles 兼容包中的 makeStyles 生成的样式默认注入顺序晚于 MUI 内置组件样式,导致自定义样式权重低于内置样式被覆盖。

解决方案

方案1:调整样式注入顺序(最便捷的兼容方案)

在应用根节点外层包裹 StyledEngineProvider 并开启 injectFirst 属性,让 MUI 内置样式优先注入,后续 makeStyles 生成的自定义样式优先级会自动高于内置样式:

import { StyledEngineProvider } from '@mui/material/styles';

ReactDOM.render(
  <StyledEngineProvider injectFirst>
    <App />
  </StyledEngineProvider>,
  document.getElementById('root')
);

修改后原有的 makeStyles 代码不需要做任何调整即可生效。

方案2:手动提升自定义样式权重

如果不想修改根节点配置,可以在 makeStyles 的样式规则前加 && 提高 CSS 选择器权重,强制覆盖内置样式:

const useStyles = makeStyles((theme) => ({
    drawer: {
        '&&': {
            [theme.breakpoints.down('md')]: {
                width: 0,
            }
        }
    },
    drawerPaper: {
        '&&': {
            background: theme.palette.primary.main,
            width: drawerWidth,
        }
    },
}))

方案3:迁移到v5官方推荐的样式方案(长期最优)

@mui/styles 是v5的过渡兼容包,后续版本会被移除,建议迁移到 styled 组件或者 sx 属性实现自定义样式,不需要额外处理优先级问题:

// 用styled实现drawerPaper样式
const DrawerPaper = styled(Drawer)(({ theme }) => ({
  background: theme.palette.primary.main,
  width: drawerWidth,
}));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:18:03