求助:MUI@4中使用makeStyles时出现useStyles is not a function错误
解决「Uncaught TypeError: useStyles is not a function」错误
核心问题分析
你的代码存在两个直接触发错误的问题:
- 调用顺序错误:函数内部先执行了
useStyles(),之后才声明const useStyles = makeStyles();。JS中函数表达式不会被提升到作用域顶部,此时useStyles是undefined,调用它自然会抛出「不是函数」的错误。 makeStyles使用不规范:makeStyles必须接收一个定义样式的对象作为参数,否则生成的钩子无法正常返回样式类。
另外,你的依赖同时混合了Material UI 4(@material-ui/*)和Material UI 5(@mui/*),两个版本的样式方案不兼容,可能引发额外冲突。
解决方案
1. 修正代码的调用顺序和makeStyles用法
把useStyles的声明移到调用之前,并且传入样式对象:
// @material-ui/core import { makeStyles } from '@material-ui/styles'; // 自定义样式(根据业务需求修改) const useStyles = makeStyles({ dashboardContainer: { padding: '24px', minHeight: '100vh', backgroundColor: '#f0f2f5' } }); export default function Dashboard() { const classes = useStyles(); return ( <div className={classes.dashboardContainer}> {/* 组件内容 */} </div> ); }
2. 统一Material UI版本
由于MUI4和MUI5的样式体系不兼容,建议统一版本避免后续问题:
- 若继续使用MUI4:移除所有
@mui/*开头的依赖,确保所有组件、工具都来自@material-ui/*包。 - 若迁移到MUI5:MUI5已废弃
makeStyles,推荐使用@mui/material/styles的styled函数或sx属性,同时移除所有@material-ui/*开头的依赖。示例:
import { styled } from '@mui/material/styles'; import Box from '@mui/material/Box'; const StyledDashboard = styled(Box)({ padding: '24px', minHeight: '100vh', backgroundColor: '#f0f2f5' }); export default function Dashboard() { return ( <StyledDashboard> {/* 组件内容 */} </StyledDashboard> ); }
内容的提问来源于stack exchange,提问作者Hayaz
相关产品推荐
相关产品推荐

