我已经实现了一个简单的标签代码。我正在尝试将标签容器移动到我的 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>
);
},
最佳答案
由于这一行,内容在两个地方都显示了:
<div className="tabs__content">
{this.props.children[this.state.selected]}
</div>
props.children
属性包含两个子项,因此您选择只显示选定的内容。这是正确的,只是由于 map
,您要为每个 child 执行此操作:
<ul className="tabs__labels">
{this.props.children.map(labels.bind(this))}
</ul>
最有效的解决方案是使用与 this.state.selected === index
相同的检查,通过设置内容 only 如果它是所选内容:
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 .
关于javascript - 相同的选项卡内容显示两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40498339/