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

Posted

技术标签:

【中文标题】Node + React - 带连字符的 CSS 类名【英文标题】:Node + React - Hyphenated CSS Class Names 【发布时间】:2016-06-20 00:52:03 【问题描述】:

我目前正在使用react-starter-kit 并且有一些反应组件,每个组件都有自己的样式文件(scss)。基本上,每个组件都会在顶部导入样式文件,例如:

import s from './Header.scss';

现在,对于没有连字符的 css 类(例如:'notification'),我可以毫无问题地使用它,但我不知道如何使用带连字符的 css 类:

render() 
 return (
  <div className=s.header-inner> </div>
 );

这显然会引发错误:'inner is undefined'。

我将header-inner 更改为header_inner,并且在我的组件中也是如此,它工作正常,但我不能这样做,因为我的 css 文件非常庞大,包含数百个类。

任何帮助将不胜感激。

谢谢

【问题讨论】:

【参考方案1】:

您可以通过点设置 css 类,而无需在括号内使用字符串。

见https://github.com/webpack/css-loader

如果你将 webpack config 的 css-loader 设置为

css-loader?camelCase

现在你可以做这样的事情了

<div className=s.headerInner> </div>

【讨论】:

【参考方案2】:

- 不是有效的标识符字符,因此您的原始代码将被评估为:

s.header - inner

您尚未定义名为 inner 的变量,因此您会收到引用错误。

但是任何字符都可以用来组成一个对象的键,所以你可以使用字符串来访问你想要的属性。

return (
  <div className=s['header-inner']> </div>
);

【讨论】:

【参考方案3】:
s['header-inner']

javascript 中,点表示法很方便,但它不适用于非法变量。在这种情况下,请使用括号表示法。

另外,不相关但您可能很快也会遇到这种情况:javascript 中的 CSS 样式变成了驼峰式。因此,如果您要设置样式:

<div style= backgroundColor: '#FFF', zIndex: 3  />

【讨论】:

是的,明白了。谢谢!

以上是关于Node + React - 带连字符的 CSS 类名的主要内容,如果未能解决你的问题,请参考以下文章

在 react 和 node.js 应用程序中,styles.css 并未仅应用于一页

如何在 node.js 中导入 font-awesome 以在 react.js 中使用?

css 带连字符的无序列表

React 中使用sass

Web前端/全栈核心(html5/css3/js/vue/react/angular/es6/node)观看笔记

模块构建失败:未知单词(2:9)| bundle / webpack的问题(react,redux,js,node)