相同的标签内容正在显示两次

时间:2016-11-08 23:47:55

标签: javascript html css reactjs redux

我已经实现了一个简单的标签代码。我试图将标签容器移动到我的li标签内,因为它是一个新的要求。更改代码后,相同的选项卡内容正在显示两次。

  _renderTitles: function () {
    function labels(child, index) {
        var activeClass = (this.state.selected === index ? 'active' : '');

        return (
        <li role="presentation" key={index} className={child.props.liClass}>
            <a href="#" 
            className={`sports-tab-header ${activeClass}`}
            onClick={this.handleClick.bind(this, index)}>
            <h2>{child.props.label}</h2>
            <p className="sports-subtitle">{child.props.subtitle}</p>
          </a>
        </li>
      );
    }
    return (
        <ul className="tabs__labels">
        {this.props.children.map(labels.bind(this))}
      </ul>
    );
  },

1 个答案:

答案 0 :(得分:1)

由于这一行,内容正在两个地方展示:

<div className="tabs__content">
  {this.props.children[this.state.selected]}
</div>

props.children属性包含两个子项,因此您选择仅显示所选内容。这是正确的,除非您为每个孩子执行此操作,因为map

<ul className="tabs__labels">
  {this.props.children.map(labels.bind(this))}
</ul>

最有效的解决方案是通过设置内容 (如果它是所选内容),对this.state.selected === index使用相同的检查:

var isActive = this.state.selected === index;
var activeClass = (isActive ? 'active' : '');
// Only set the content if active 
var content = isActive ? this.props.children[this.state.selected] : null;
...

// Show the content, which will be null if not active tab
<div className="tabs__content">
  {content}
</div>

请参阅updated JSFiddle