【问题标题】:how to prevent a material-ui package from overriding my app style?如何防止 material-ui 包覆盖我的应用程序样式?
【发布时间】:2021-12-01 08:38:36
【问题描述】:

我在 React-Gatsby 应用程序中使用最新的 Material-UI 安装。 我为轮播安装了第三方软件包 (react-material-ui-carousel)。

当我使用这个包时,我发现它通过添加与我的应用程序的 css div 竞争的 css div 来覆盖我的一些 material-ui 样式。

data-emotion div 由我的应用添加,data-jss 样式 div 由包 react-material-ui-carousel 添加。

有没有办法将轮播样式限制为仅轮播组件,而不影响我页面上的其他 Material-ui 组件? (例如MuiButtonBase 包含覆盖我网站规则的MuiButtonBase-root 规则)

【问题讨论】:

    标签: reactjs material-ui emotion


    【解决方案1】:

    尝试检查您的包裹锁 并使用 3 个区块

    "node_modules/react-material-ui-carousel": {
      "version": "2.3.7-mui5",
      "resolved": "https://registry.npmjs.org/react-material-ui-carousel/-/react-material-ui-carousel-2.3.7-mui5.tgz",
      "integrity": "sha512-XM6+kn6db++riBKUufl7XQI8eE/qj5XWpkDpHUWnioICCdUqx6cvWJmIqjBqcMNB4FgcgJFVmsE3iEKs/4gRIA==",
      "dependencies": {
        "auto-bind": "^2.1.1",
        "react-swipeable": "^6.1.0"
      },
      "peerDependencies": {
        "@emotion/react": "^11.4.1",
        "@emotion/styled": "^11.3.0",
        "@mui/icons-material": "^5.0.0",
        "@mui/material": "^5.0.0",
        "@mui/styles": "^5.0.0",
        "react": "^17.0.1",
        "react-dom": "^17.0.1"
      }
    },
    
    "react-material-ui-carousel": {
      "version": "2.3.7-mui5",
      "resolved": "https://registry.npmjs.org/react-material-ui-carousel/-/react-material-ui-carousel-2.3.7-mui5.tgz",
      "integrity": "sha512-XM6+kn6db++riBKUufl7XQI8eE/qj5XWpkDpHUWnioICCdUqx6cvWJmIqjBqcMNB4FgcgJFVmsE3iEKs/4gRIA==",
      "requires": {
        "auto-bind": "^2.1.1",
        "react-swipeable": "^6.1.0"
      }
    },
        "react-material-ui-carousel": "^2.3.7-mui5",
    

    【讨论】:

      【解决方案2】:

      您可以使用@material-ui/core/styles 中的StylesProvider,这样您可以为类名添加前缀并避免样式覆盖

      import {
        MuiThemeProvider,
        ThemeProvider,
        StylesProvider,
        createGenerateClassName,
      } from '@material-ui/core/styles';
      
      const generateClassName = createGenerateClassName({
        seed: 'classes-custom-prefix',
      });
      
      export const Provider = ({ children, theme }) => {
        return (
          <StylesProvider generateClassName={generateClassName}>
            <MuiThemeProvider theme={theme}>
              <ThemeProvider theme={theme}>{children}</ThemeProvider>
            </MuiThemeProvider>
          </StylesProvider>
        );
      };

      【讨论】:

        【解决方案3】:

        我在生产和部署之间遇到了样式问题/不一致。对我来说,在没有“!important”的情况下设置元素样式和覆盖 MUI 样式的最佳方法是使用:

        import { styled } from "@mui/material/styles";
        import Button from "@material-ui/core/Button";
        
        const CustomButton = styled(Button)(({ theme }) => ({
          display: "flex",
          ...
        }));
        

        然后代替使用

        &lt;Button ...args&gt;label&lt;/Button&gt;

        使用

        &lt;CustomButton ...args&gt;label&lt;/CustomButton&gt;

        【讨论】:

          猜你喜欢
          • 2020-01-30
          • 2019-03-07
          • 1970-01-01
          • 2021-01-01
          • 2020-05-27
          • 2020-06-13
          • 2020-11-26
          • 2018-11-22
          • 1970-01-01
          相关资源
          最近更新 更多