【发布时间】:2021-12-10 17:47:24
【问题描述】:
我目前正在开发一个使用 Mui v5.0.4 的 react (v.17) 项目。我已经在需要的地方编写了自定义样式,并且一切都按预期工作。几天后,我开始从事同一个项目,当我启动应用程序时,我编写的样式并没有按预期显示。这发生在特定的组件中,例如排版、按钮。我已经彻底检查了我的代码,在不同的浏览器和计算机上尝试过,但没有成功。
我创建了一个新项目以查看问题是否仅限于前一个项目,但似乎也并非如此。我将在下面发布应用程序的代码sn-ps以供参考。
App.js
import React from 'react';
import Something from './something/Something';
function App() {
return <Something />;
}
export default App;
Something.js
import React from 'react';
import PropTypes from 'prop-types';
import { Typography } from '@mui/material';
import { withStyles } from '@mui/styles';
import styles from './Something.styles';
const Something = ({ classes }) => {
return <Typography className={classes.something}>Something</Typography>;
};
Something.propTypes = {
classes: PropTypes.object.isRequired
};
export default withStyles(styles)(Something);
Something.styles.js
const styles = (theme) => ({
something: {
fontWeight: 700,
color: '#FF0000'
}
});
export default styles;
我应该提到颜色确实适用,但字体粗细不适用。 !important 完成了工作,但在这个问题出现之前我不需要它。应用的样式类确实出现在浏览器检查器中,我附上了下面的屏幕截图。
我也很好奇为什么类名是.Something-something-1 而不是.Something-something。如果需要,请询问任何其他信息。任何帮助深表感谢。谢谢!
P.S. 这是一个复制问题的代码沙箱。谢谢! https://codesandbox.io/s/long-sky-8jree
解决方案(针对这个特定问题)
- 如果您使用的是 Mui v5.0.4,请使用以下一组依赖项
"@emotion/react": "^11.5.0",
"@emotion/styled": "^11.3.0",
"@mui/material": "^5.0.4",
"@mui/icons-material": "^5.0.3",
"@mui/styles": "^5.0.1",
- 使用来自 Mui 的组件(Box、Grid 等)包装
App.js中的元素。
import React from "react";
import { Box } from "@mui/material";
import Something from "./Something/Something";
export default function App() {
return (
<Box>
<Something />
</Box>
);
}
我已经使用有效的解决方案更新了上述相同的代码沙箱。
【问题讨论】:
-
所以这个问题背后的原因是 Mui v5 的依赖项冲突。它不会给您任何错误,但除非所需依赖项的正确版本可用,否则样式将不适用。我已经在帖子上为 Mui v5.0.4 添加了它们,以防其他人需要。
-
将元素包装在
App.js中的父 Mui 组件(框、网格等)中似乎也可以解决问题。 -
第二个选项对我有用,非常感谢,我很生气。但是,我真的不明白为什么它解决了这个问题,并且想知道您是如何找到解决方案的,因为文档对此完全保持沉默。另外,不知道为什么第一个解决方案对我不起作用,因为我的项目是全新的并且我有最新版本。谢谢
-
@Suren 现在在文档中列出了依赖项。我不认为它们在以前的版本中列出。至于第二种解决方案,我通过玩弄代码来解决这个问题。不确定这是否已在较新版本中进行了修补。很高兴我也可以帮助您解决问题。 :D
标签: javascript reactjs material-ui