reactjs - 在 ReactJS 中添加一个类并从另一个类中删除类
问题描述
我想使用 ul 和 li 创建一个选项卡,该选项卡将显示相同的内容,该内容被选中,应该显示一个按钮,该按钮将我发送到下一个选项卡,该按钮将激活以指示向我显示哪个选项卡
render() {
return (
<div>
<ul>
<li><a href="#tab-menu-1" className="active">Tab 1</a></li>
<li><a href="#tab-menu-2">Tab 2</a></li>
<li><a href="#tab-menu-3">Tab 3</a></li>
</ul>
<div id="tab-menu-1">Tab 1 Content <button>Move to Tab 2</button></div>
//in default it should show the tab 1 content only and When i Press this button on above Div it should be moved to next tab and the class name will be transfer to the tab 2 on <li>
<div id="tab-menu-2">Tab 2 Content <button>Move to Tab 2</button></div>
//in default it should show the tab 2 content only and When i Press this button on above Div it should be moved to next tab and the class name will be transfer to the tab 3 on <li>
<div id="tab-menu-3">Tab 3 Content <button>Move to Tab 2</button></div>
//in default it should show the tab 3 content only and When i Press this button on above Div it should be moved to next tab and the class name will be transfer to the tab 1 on <li>
</div>
);
}
解决方案
您可以将 activeIndex id 保存在组件的状态上,并有条件地呈现 className。
class Demo extends React.Component {
state = {
activeIdx: 0
};
render() {
return (
<div>
<ul>
<li><a href="#tab-menu-1" className={this.state.activeIdx === 0 ? 'active' : ''} data-index={0} onClick={this.handleChange}>Tab 1</a>
</li>
<li><a href="#tab-menu-2" className={this.state.activeIdx === 1 ? 'active' : ''} data-index={0} onClick={this.handleChange}>Tab 2</a></li>
<li><a href="#tab-menu-3" className={this.state.activeIdx === 2 ? 'active' : ''} data-index={0} onClick={this.handleChange}>Tab 3</a></li>
</ul>
<div id="tab-menu-1">Tab 1 Content <button>Move to Tab 2</button></div>
<div id="tab-menu-2">Tab 2 Content <button>Move to Tab 2</button></div>
<div id="tab-menu-3">Tab 3 Content <button>Move to Tab 2</button></div>
</div>
);
}
handleChange = (evnt) => {
this.setState({activeIdx: evnt.target.data.index});
}
}
更好的方法是从数组中生成项目列表。
class Demo extends React.Component {
state = {
activeIdx: 0,
list: ["content 1", "content 2", "content 3"]
};
render() {
return (
<div>
<ul>
{this.state.list.map((item, index) => (
<li key={item}>
<a
href={`#tab-menu-${index + 1}`}
className={this.state.activeIdx === index && "active"}
data-index={index}
onClick={this.handleChange}
>
Tab {index + 1}
</a>
</li>
))}
</ul>
{this.state.list.map((item, index) => (
<div id={`tab-menu-${index + 1}`} key={item}>
{item}
<button>Move to Tab {index + 2}</button>
</div>
))}
</div>
);
}
handleChange = evnt => {
this.setState({ activeIdx: evnt.target.data.index });
};
}
推荐阅读
- apache-kafka - KafkaIO withLogAppendTime 与 withProcessingTime
- django - django:使用一对一扩展用户模型:如何保存()配置文件模型的字段
- jquery - 我想将父母滚动替换为弹出窗口的滚动
- python - 在 pos 标签列表上应用 Tfidfvectorizer 会产生 ValueError
- java - 评估排序算法的算法复杂度
- python - 如何在 Flask 中创建服务?
- python - 无法使用 sounddevice 录制声音
- ms-access - RecordSource 更新后 MS Access 导航中断
- angular - Angular 6,如何在循环时更新角度输入字段?
- javascript - 将来自 JAX-RS 的 Exel 响应发送到 AngularJS