MUI 集成 nextjs
2025-04-26 15:48:12+08:00
MUI 集成 nextjs
安装依赖包
首先确认安装了 next 和 MUI:
npm install next react react-dom @mui/material @emotion/react @emotion/styled
然后安装 MUI 的 nextjs 兼容包:
npm install @mui/material-nextjs @emotion/cache
配置
基本配置
编辑 app/layout.tsx
,添加 APP Router:
import { AppRouterCacheProvider } from '@mui/material-nextjs/v15-appRouter';
export default function RootLayout(props) {
return (
<html lang="en">
<body>
<AppRouterCacheProvider>
{props.children}
</AppRouterCacheProvider>
</body>
</html>
);
}
主题配置
创建单独的 theme.ts
文件:
'use client';
import { blue, pink } from '@mui/material/colors';
import { createTheme } from '@mui/material/styles';
const theme = createTheme({
// 使用 CSS 主题变量,防止 SSR 闪烁
cssVariables: {
colorSchemeSelector: 'class'
},
// 颜色配置
colorSchemes: {
light: {
palette: {
primary: blue
secondary: pink,
mode: 'light',
},
},
dark: {
palette: {
primary: blue
secondary: pink,
mode: 'dark',
},
}
},
// 字体配置
typography: {
fontFamily: 'var(--font-roboto)',
},
});
export default theme;
编辑 app/layout.tsx
, 添加主题配置:
import { AppRouterCacheProvider } from '@mui/material-nextjs/v15-appRouter';
import { ThemeProvider } from "@mui/material";
import InitColorSchemeScript from "@mui/material/InitColorSchemeScript";
import theme from "theme";
export default function RootLayout(props) {
return (
<html lang="en" suppressHydrationWarning>
<body>
<AppRouterCacheProvider>
<ThemeProvider theme={theme}>
<InitColorSchemeScript attribute="class" />
{props.children}
</ThemeProvider>
</AppRouterCacheProvider>
</body>
</html>
);
}
使用 useColorScheme
来获取和操作主题:
const {mode, setMode} = useColorScheme();