带有 next.js 的 material-ui 样式

Posted

技术标签:

【中文标题】带有 next.js 的 material-ui 样式【英文标题】:material-ui styles with next.js 【发布时间】:2021-10-05 15:51:57 【问题描述】:

我无法让 Material-ui 样式与 next.js 一起正常工作。当我更改样式然后在运行开发服务器时保存时,样式会被应用,但是如果我重新加载页面、保存任何其他更改或重新启动服务器,默认的 material-ui 样式会覆盖我的自定义样式。此外,每当我使用 Box material-ui 组件时,我都会在控制台中看到此错误:

react-dom.development.js:67 Warning: Prop `className` did not match. Server: "MuiBox-root MuiBox-root-3 makeStyles-boxStyles-1" Client: "MuiBox-root MuiBox-root-4 makeStyles-boxStyles-1"

这是我的 _document.tsx:https://pastebin.com/wJD9jyZQ

这是我的 _app.tsx:https://pastebin.com/s8Ys01kb

这是我的 index.tsx:https://pastebin.com/t5Z9QGpP

这里是 index.styles.ts(我的自定义样式所在的位置):https://pastebin.com/qe7M5ysq

【问题讨论】:

【参考方案1】:

_document.js 文件中,您需要使用 ServerStyleSheets 对象增强 App

对于 Material UI v4,您需要导入:

import  ServerStyleSheets  from '@material-ui/core/styles';

对于 Material UI v5,您需要导入:

import  ServerStyleSheets  from '@material-ui/styles';

然后在文件后面:

const sheets = new ServerStyleSheets();

...

enhanceApp: (App: any) => (props) => sheets.collect(<App ... />),

看到这个v4 example

即使 v5 示例不包含 ServerStyleSheets

,上述内容也适用于 v5

【讨论】:

以上是关于带有 next.js 的 material-ui 样式的主要内容,如果未能解决你的问题,请参考以下文章

将 Material UI Link 组件与 Next.JS Link 组件一起使用

如何在 React(Next.js) 中分别控制每个属性?

如何将 Nextjs + styled-components 与 material-ui 集成

如何在 Next.js 中实现加载屏幕

如何在服务器端渲染中将样式应用于 Next.js 中的 HTML?

在 Next JS 中,Material UI 快餐栏无法正常工作