我想有条件地显示和隐藏这个按钮组,这取决于从父组件传入的内容,看起来像这样:

    <TopicNav showBulkActions={this.__hasMultipleSelected} />

    __hasMultipleSelected: function() {
      return false; //return true or false depending on data
    }
    var TopicNav = React.createClass({
    render: function() {
    return (
        <div className="row">
            <div className="col-lg-6">
                <div className="btn-group pull-right {this.props.showBulkActions ? 'show' : 'hidden'}">
                    <button type="button" className="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
                      Bulk Actions <span className="caret"></span>
                    </button>
                    <ul className="dropdown-menu" role="menu">
                      <li><a href="#">Merge into New Session</a></li>
                      <li><a href="#">Add to Existing Session</a></li>
                      <li className="divider"></li>
                      <li><a href="#">Delete</a></li>
                    </ul>
                </div>
            </div>
        </div>
        );
      }
    });

然而,{this.props。showBulkActions吗?'show': 'hidden'}。我做错什么了吗?


当前回答

替换:

<div className="btn-group pull-right {this.props.showBulkActions ? 'show' : 'hidden'}">`

:

<div className={`btn-group pull-right ${this.props.showBulkActions ? 'show' : 'hidden'}`}

其他回答

参考@split fire answer,我们可以用模板文字来更新它,这样更有可读性,供参考Checkout javascript模板文字

<div className={`btn-group pull-right ${this.props.showBulkActions ? 'show' : 'hidden'}`}>

根据@spitfire109的回答,我们可以这样做:

rootClassNames() {
  let names = ['my-default-class'];
  if (this.props.disabled) names.push('text-muted', 'other-class');

  return names.join(' ');
}

然后在渲染函数中:

<div className={this.rootClassNames()}></div>

保持JSX简短

我已经试图调整我的答案,以包括所有最好的解决方案。

有很多不同的方法可以做到这一点。

1. 类内嵌

<div className={`... ${this.props.showBulkActions ? 'show' : 'hidden'}`}>
  ...
</div>

2. 使用值

var btnClass = classNames(
  ...
  {
    'show': this.props.showBulkActions,
    'hidden': !this.props.showBulkActions
  }
);

3.使用变量

let dependentClass = this.props.showBulkActions ? 'show' : 'hidden';

className={`... ${dependentClass }`}

4. 使用clsx

<div className={clsx('...',`${this.props.showBulkActions ? 'show' : 'hidden'}`)}>
  ...
</div>

如果你只需要一个可选类名:

<div className={"btn-group pull-right " + (this.props.showBulkActions ? "show" : "")}>

更优雅的解决方案,更有利于维护和可读性:

const classNames = ['js-btn-connect'];

if (isSelected) { classNames.push('is-selected'); }

<Element className={classNames.join(' ')}/>