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

求助: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 08:52:52