【问题标题】:Mui v5.0.4 makeStyles, withStyles won't apply styles to mui components [duplicate]Mui v5.0.4 makeStyles,withStyles不会将样式应用于mui组件[重复]
【发布时间】: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 完成了工作,但在这个问题出现之前我不需要它。应用的样式类确实出现在浏览器检查器中,我附上了下面的屏幕截图。

Click to check image

我也很好奇为什么类名是.Something-something-1 而不是.Something-something。如果需要,请询问任何其他信息。任何帮助深表感谢。谢谢!

P.S. 这是一个复制问题的代码沙箱。谢谢! https://codesandbox.io/s/long-sky-8jree

解决方案(针对这个特定问题)

  1. 如果您使用的是 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",
  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


【解决方案1】:

为一次性情况添加样式覆盖的最简单方法是使用 sx 所有 MUI 上可用的属性reference

import styles from './Something.styles';

const Something = ({ classes }) => {
  return <Typography sx={styles.something}>Something</Typography>;
 //classes prop wasn't needed here
};

【讨论】:

  • 就我而言,问题在于 Mui 的依赖项。我已经用对我有用的解决方案更新了帖子。您提供的解决方案似乎不适用于我的情况。也许我错过了什么?
  • 我已经使用提供的沙盒链接进行了测试。无论如何很高兴你设法解决它:)
  • 谢谢@cmgchess。我还弄清楚了为什么您的解决方案对我不起作用。我已经导出了带有主题 (const styles = (theme) =&gt; ({})) 的样式。当样式仅在没有主题的情况下导出时,您的工作有效 (const styles = {})。无论如何感谢您的回答,我现在知道 sx 道具还有其他用途。感谢您与我分享。快乐编码。 :D
猜你喜欢
  • 2021-12-29
  • 2021-12-24
  • 1970-01-01
  • 2022-08-16
  • 2022-07-27
  • 2021-12-03
  • 2022-07-19
  • 1970-01-01
  • 2018-12-24
相关资源
最近更新 更多