Material-UI 生产/构建中的渲染错误

Material-UI Rendering Bugs in production / build

我在构建 react-app 时遇到了很大的问题。

我正在使用 material-ui/core v.4.10.2 正常 react-scripts 启动 dev-server 一切正常。

但是当通过 Nginx 或 npm-module 构建和服务时,渲染工作不正常...

(我在 material-ui Github 上看到了类似的问题,但它们都(错误地)关闭了


这是我的 package.json 以防我的依赖项出现问题(我当然不认为是这种情况)

{
  "name": "web_app",
  "version": "0.0.1",
  "private": true,
  "dependencies": {
    "@material-ui/core": "^4.10.2",
    "@material-ui/styles": "4.10.0",
    "@material-ui/icons": "^4.2.1",
    "@material-ui/lab": "^4.0.0-alpha.45",
    "rc-color-picker": "^1.2.6",
    "react": "^16.9.0",
    "react-dom": "^16.9.0",
    "react-infinite-scroll-hook": "^2.0.1",
    "react-router-dom": "^5.0.1",
    "react-scripts": "3.1.1",
    "tinycolor2": "^1.4.1"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "devDependencies": {
    "@date-io/date-fns": "^1.3.11",
    "@material-ui/pickers": "^3.2.7",
    "@mui-treasury/styles": "^1.1.0",
    "@trendmicro/react-sidenav": "^0.4.5",
    "browserfs": "^1.4.3",
    "cronstrue": "^1.85.0",
    "date-fns": "^2.0.0-beta.5",
    "formik": "^2.1.4",
    "i18next": "^17.0.13",
    "i18next-browser-languagedetector": "^3.0.3",
    "i18next-xhr-backend": "^3.1.2",
    "lodash": "^4.17.15",
    "material-ui-confirm": "^2.0.4",
    "moment": "^2.24.0",
    "react-animated-slider": "^2.0.0",
    "react-beautiful-dnd": "^13.0.0",
    "react-blur-image-loader": "^0.2.2",
    "react-digital-clock": "^0.1.2",
    "react-dropzone-uploader": "^2.10.1",
    "react-fine-uploader": "^1.1.1",
    "react-i18next": "^10.12.2",
    "react-image-lightbox": "^5.1.1",
    "react-picky-date-time": "^1.3.2",
    "react-router-dynamic-breadcrumbs": "^2.2.0",
    "react-sticky-el": "^2.0.5",
    "recompose": "^0.30.0",
    "store2": "^2.10.0",
    "tubular-react": "^4.1.31",
    "yup": "^0.28.4"
  }
}


Production-Version 和 Dev-Version

中的视图图像

我不知道为什么,但几分钟前我也遇到了问题 header 比这幅图更小,但我现在无法重现…… 有时候效果好一些,有时候效果差一些,可惜这样出货不合适。

但是在这个 GIF 中你会看到更多这样的问题:

(在 Dev-Mode 中没有一个视图不起作用...仅在构建时发生)


我已经尝试过的

Nothing worked...sadly.


希望大家有类似的问题。 我看到有人在 MUI 上打开了一个问题 Github,但就像我说的那样,它很遗憾地关闭了

https://github.com/mui-org/material-ui/issues/21502

我遇到了完全相同的问题。事实证明,Webpack 会乱用 Material UI 的 JSS 优先级规则。您需要使用索引选项手动覆盖注入顺序。

在您的 makeStyles()withStyles() 中,添加 {index: 1}:

//Hook
const useStyles = makeStyles({
    // your styles here
}, {index: 1})

// HOC 
MyComponent = withStyles({
    // your styles here
}, {index: 1})(MyComponent)

感谢@Mordechai 节省了一天的时间。

@antax,该解决方案甚至适用于主题。看来你搞砸了语法。

makeStyles(theme => ({ /* your styles here */ }), {index: 1});  //WILL WORK!!! 

我在 material UI 的 Appbar 和 Navigation drawer 方面遇到问题。

The #1 reason this likely happens is due to class name conflicts once your code is in a production bundle.

根据 Material UI 常见问题解答 (https://material-ui.com/getting-started/faq/),StylesProvider 是解决此问题的方法。它对我有用!这是我所做的-

在我的布局组件中,它有应用栏、工具栏、导航抽屉,我将整个渲染代码包含在

import { StylesProvider } from '@material-ui/core/styles';

    return (
        <StylesProvider injectFirst> 
            //rest of my code
            <div></div>
        </StylesProvider>
    );

您可以在 https://material-ui.com/styles/api/#stylesprovider

上按照官方示例进行操作

使用“@material-ui/core”:“^4.11.3”,“反应”:“^17.0.1”,

根据 Material Ui@mui/styles 已弃用。 而是使用 sx={{ //your style }}

的内联样式