ReactJS:聚合CSS类

时间:2015-07-28 03:04:26

标签: css reactjs

假设我将一些CSS类定义为:

.fg-dark-color {color: #444;}
.bg-dark-color {background-color: #444;}
.fg-light-color {color: #fff;}
.bg-light-color {background-color: #fff;}

我想将这些类聚合成如下组:

.btn {
   .fg-dark-color;
   .bg-light-color;
}

.btn-reversed {
   .fg-light-color;
   .bg-dark-color;
}

当我有反应组件时:

var Btn = React.createClass({
  render: function () {
    return (
       <button className='btn'>My button</button>
    );
  }
});

我希望课程名称btn自动扩展为fg-dark-color bg-light-color

是否有任何reactjs工具支持这样做?或者,如果没有现成的工具,我怎么能以通用方式做出反应呢?

4 个答案:

答案 0 :(得分:2)

尝试使用Classnames,React的模块officially supported

根据你所写的内容,你可以写一下:

var btn = [
   fg-dark-color,
   bg-light-color
]

然后:

return (
   <button className={classNames(btn)}>My button</button>
);

答案 1 :(得分:1)

要获得此类效果,您可以将类编写为Javascript对象并与实用程序函数结合使用:

m: function() {
    var result = {};
    for (var i = 0; i < arguments.length; i++) {
        if (arguments[i]) {
            for (k in arguments[i]) {
                result[k] = arguments[i][k];
            }
        }
    }
    return result;  
}

有关React中CSS的更多指示,我建议Christopher Chedeau在这个主题上有很棒的slide deck

答案 2 :(得分:0)

您可以使用classNames创建所需的CSS图纸,然后您可以将它们应用为

更好的是classNames允许你使用条件。

let setActive = (isActive) => {
    return classNames({
        active: isActive
    });
};

然后您可以将其用作:

<Element className={setActive(true)} />

答案 3 :(得分:0)

好的,我已经提出了自己的解决方案:https://www.npmjs.com/package/expjs

用法:

var ExpJs = require('expjs');
// the rules could be managed centrally in another js file
// in which case it would be: var rules = require('css_rules');
var rules = {
    'btn': 'fg-color-dark bg-color-light',
    'btn-reverse': 'fg-color-light bg-color-dark',
    ... 
}
var exp = ExpJs.init(rules);

var Btn = React.createClass({
  render: function () {
    return (
       <button className={exp('btn-reverse btn-my-button')}>My button</button>
    );
  }
});

上面的代码将输出以下html:

<button class='fg-color-light bg-color-dark btn-my-button'>My button</button>