我是ReactJS和JSX的新手,我对下面的代码有一个小问题。

我试图在每个li上添加多个类到className属性:

<li key={index} className={activeClass, data.class, "main-class"}></li>

我的React组件是:

var AccountMainMenu = React.createClass({
  getInitialState: function() {
    return { focused: 0 };
  },

  clicked: function(index) {
    this.setState({ focused: index });
  },

  render: function() {
    var self = this;
    var accountMenuData = [
      {
        name: "My Account",
        icon: "icon-account"
      },
      {
        name: "Messages",
        icon: "icon-message"
      },
      {
        name: "Settings",
        icon: "icon-settings"
      }
    /*{
        name:"Help &amp; Support &nbsp; <span class='font-awesome icon-support'></span>(888) 664.6261",
        listClass:"no-mobile last help-support last"
      }*/
    ];

    return (
      <div className="acc-header-wrapper clearfix">
        <ul className="acc-btns-container">
          {accountMenuData.map(function(data, index) {
            var activeClass = "";

            if (self.state.focused == index) {
              activeClass = "active";
            }

            return (
              <li
                key={index}
                className={activeClass}
                onClick={self.clicked.bind(self, index)}
              >
                <a href="#" className={data.icon}>
                  {data.name}
                </a>
              </li>
            );
          })}
        </ul>
      </div>
    );
  }
});

ReactDOM.render(<AccountMainMenu />, document.getElementById("app-container"));

当前回答

使用https://www.npmjs.com/package/classnames

import classNames from classNames;

可以使用逗号分隔多个类: <李className ={类名(类。tableCellLabel classes.tableCell)} > < /李>总 可以使用多个类,使用逗号和条件分隔: <李className ={类名(类。buttonArea !节点。</li> . length && classes.buttonAreaHidden)}>Hello World

使用数组作为classNames的道具也可以,但会给出警告。

className={[classes.tableCellLabel, classes.tableCell]}

其他回答

只需将join(' ')函数与空格链接到数组,例如:

<p className={['alert','red',condIsTrue ? 'up' : 'down'].join(' ')}>something...</p>

Concat

不需要花哨,我使用CSS模块,这很容易

import style from '/css/style.css';

<div className={style.style1+ ' ' + style.style2} />

这将导致:

<div class="src-client-css-pages-style1-selectionItem src-client-css-pages-style2">

换句话说,两种风格都有

条件

同样的想法也可以用在“如果”上

const class1 = doIHaveSomething ? style.style1 : 'backupClass';

<div className={class1 + ' ' + style.style2} />

ES6

在过去的一年左右,我一直在使用模板文字,所以我觉得它值得一提,我发现它非常有表现力,易于阅读:

`${class1} anotherClass ${class1}`

要添加更多的类

... className={`${classes.hello} ${classes.hello1}`...

我就是这么做的:

组件:

const Button = ({ className }) => (
  <div className={ className }> </div>
);

调用组件:

<Button className = 'hashButton free anotherClass' />

一般来说,人们喜欢

<div className={  `head ${style.class1} ${Style.class2}`  }><div>

OR

<div className={  'head ' + style.class1 + ' ' + Style.class2 }><div>

OR

<div className={  ['head', style.class1 , Style.class2].join(' ')  }><div>

但是您可以选择创建一个函数来完成这项工作

function joinAll(...classes) {
  return classes.join(" ")
}

然后叫它:-

<div className={joinAll('head', style.class1 , style.class2)}><div>