reactjs - 从单击获取索引并将类设置为反应组件中另一个容器中的相同索引
问题描述
我试图在单击链接时获取索引,然后将类设置为单击的链接,并将类设置为另一个容器中的相同索引。
小提琴链接:https ://jsfiddle.net/iBertel/jw34bLed/5/
到目前为止,这是我的代码:
import React, { Component } from 'react'
const arrLinks = ['Link1', 'Link2', 'Link3']
const arrContent = ['Content1', 'Content2', 'Content3']
class Tabbing extends Component {
constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this);
this.state = {
activeLinkId: false,
activeContentId: false
};
}
setActiveElement(id){
this.setState({activeLinkId: id})
this.setState({activeContentId: id})
}
handleClick() {
//console.log(e.target.getAttribute('data-key'));
const currentLinkState = this.state.activeLinkId;
const currentContentState = this.state.activeContentId;
this.setState({
activeLinkId: !currentLinkState,
activeContentId: !currentContentState
});
}
render() {
return (
<div>
<ul className="container-one">
{arrLinks.map((arrLinks, index) =>
<li
data-key={arrLinks}
key={index}
className={index === this.state.activeLinkId ? 'active' : null}
onClick={() => this.handleClick(index)}
>
{arrLinks}
</li>
)}
</ul>
<ul className="container-two">
{arrContent.map((arrContent, index) =>
<li
key={index}
data-key={arrContent}
className={index === this.state.activeContentId ? 'active' : null}
>
{arrContent}
</li>
)}
</ul>
</div>
)
}
}
export default Tabbing
解决方案
添加index
参数handleClick
并保存在状态中。我假设数组具有相同的长度,arrLinks
并且arrContent
您想使用相同的索引来切换两者的活动类。在状态中只使用一个索引,无需复制它。
class Tabbing extends Component {
constructor(props) {
super(props);
this.state = {
activeLinkId: null
};
}
handleClick = index => {
this.setState({
activeLinkId: index
});
}
render() {
return (
<div>
<ul className="container-one">
{arrLinks.map((arrLink, index) => (
<li
data-key={arrLinks}
key={index}
className={index === this.state.activeLinkId ? "active" : null}
onClick={() => this.handleClick(index)}
>
{arrLink}
</li>
))}
</ul>
<ul className="container-two">
{arrContent.map((arrContent, index) => (
<li
key={index}
data-key={arrContent}
className={index === this.state.activeLinkId ? "active" : null}
>
{arrContent}
</li>
))}
</ul>
</div>
);
}
}
推荐阅读
- c - 如何重新初始化变量(CCS 102)(程序 C)
- kubernetes - 核心管道与服务管道。Kubernetes 监控哪个更好?
- java - java - 如何在显示用GSON解析的字符串对象时去掉“\”
- mercurial - 为什么 hg purge 中止抱怨 *.* - 只有第一次?
- swiftui - 由于从tabview到多个视图内部观察到视图模型,视图自动弹出到swift ui中的上一个视图?
- kibana - 摄取管道无法处理从使用 filebeat 的事件中心获得的日志
- powershell - 使用 Add-PnPFolder 执行 PowerShell 脚本失败,但可以在命令提示符下运行
- php - 在 Wordpress/PHP 中保存全局令牌
- java - 如何使用 Java 从真实文件中读取?
- vagrant - 在 vagrantFile 中添加 vagrant 供应代码