我已经实现了一个简单的标签代码。我试图将标签容器移动到我的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>
);
},
答案 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。