Css 类名不适用于反应组件

Posted

技术标签:

【中文标题】Css 类名不适用于反应组件【英文标题】:Css classname not applied to react component 【发布时间】:2018-07-18 10:04:09 【问题描述】:

感谢您的宝贵时间和帮助。我花了几个小时试图弄清楚这一点似乎无法深入了解。

我有这个反应组件:

import styles from './style.scss';

class ButtonComponent extends React.Component  
  render() 
    return (
      <div className=styles.bunny>
        hello world
      </div>
    );
  

和scss文件:

.bunny 
  display: block;
  margin-top:50px;
  margin-bottom:55px;
  background-color: blue;

当我加载我的 html 时,当我期望它是 &lt;div class="bunny"&gt; 时,该 div 没有类名

当我将类名放在 react 组件中时:

<div className="bunny"> 

然后我可以在浏览器中看到类名。

我做错了什么?

非常感谢您。

【问题讨论】:

你是如何在 webpack 中使用 css-loader 的? 我正在使用 react-boiler-plate 项目,这是我在 webpack-base.babel.js 中的内容 // Preprocess our own .css files // This is the place to add your own loaders (e.g. sass/less etc.) // for a list of loaders, see https://webpack.js.org/loaders/#styling test: /\.(s*)css$/, exclude: /node_modules/, use: ['style-loader', 'css-loader', 'sass-loader'], , 不确定这是否有帮助,你能更具体一点吗? 导入 css 或 sass 文件实际上不会导入任何可以在 js 文件中使用的 javascript 对象,因为 css 文件不会导出任何内容。它只是告诉你的模块捆绑器(webpack)在你的包中包含 css 文件,如果它在某处使用你的组件。只需使用import './style.scss' 导入文件,然后将您的类用作字符串:&lt;div className="bunny"&gt;。当然,您的 html 文件也需要链接 css 文件。这更像是告诉 webpack:“嘿,webpack,这个组件使用了这个 sass 文件中的类,所以将它包含在我的包中。” 嗨 Trixn,这是不希望的,因为我不想在 js 文件中硬编码类名。我以前见过这个工作,但我不确定我自己配置​​错了什么。 @trixn 这根本不是真的。 【参考方案1】:

首先,您需要保证它的定义是:console.log(styles) 我不确定你是否正确导入 style.scss。

【讨论】:

【参考方案2】:

您需要导入您的 scss,例如... import './styles.scss';

Webpack 将负责捆绑您的样式,以便您可以将 className 作为字符串添加到组件中。

<div className="bunny">Hello World</div>

【讨论】:

【参考方案3】:

解决此问题的方法是将我的 scss 文件的名称从 style.scss 更改为 style.module.scss

【讨论】:

【参考方案4】:

对我来说是因为我使用commonjs的require来加载一个es模块。

【讨论】:

以上是关于Css 类名不适用于反应组件的主要内容,如果未能解决你的问题,请参考以下文章

CSS模块不适用于反应组件

为啥css文件不适用于html文件 - Django

CSS 过渡不适用于反应和样式化的组件

Node + React - 带连字符的 CSS 类名

innerHTML 不适用于 JS 中的类名

如何使用 makeStyles 将 prop 作为类名传递