【发布时间】:2018-11-21 10:06:09
【问题描述】:
我在 ReactJS 中创建了一个菜单栏,它具有一些基本的路由功能。组件的 JSX 如下:
class TopBar extends Component {
state = {
menus: [{id:0,menu:"Home"}, {id:1,menu:"Contact"}, {id:2,menu:"About"}]
}
addClass = e => {
console.log("Addclass "+ e.target);
}
render() {
return (
<Router>
<div>
<nav class="navbar navbar-expand-lg">
<div class="row">
<div class="col-sm-12">
<div class="collapse navbar-collapse">
<ul class="navbar-nav mr-auto">
{this.state.menus.map((menu,index) =>
<li className="nav-item ng-star-inserted">
<a className={`nav-link ${'active'}`} id={"sample"+ menu.id} onClick={this.addClass} >
<Link to={menu.menu}> {menu.menu} </Link>
</a>
</li>
)}
</ul>
</div>
</div>
</div>
</nav>
<Route path="/home" exact component={
Home
} />
<Route path="/contact" exact component={
Contact
} />
<Route path="/about" exact component={
About
} />
</div>
</Router>
);
}
}
CSS:
.navbar .nav-link.active {
border-bottom: 3px solid #fdd92d;
}
当我单击特定菜单(主页/联系人/关于)时,我希望将 active 类附加到该特定菜单。我添加了onClick 事件并尝试将id 属性传递给它。
但id 在调试器中是空白的。
单击菜单后如何添加active className?
【问题讨论】:
-
您可以使用
NavLink已经为router提供了activeClass -
@Dkouk 是的,但是有没有办法在不使用
NavLink的情况下做到这一点? -
是的,但您需要使用本地状态并将其与菜单循环的索引联系起来。例如
onClick={() => this.setState({active: index})} className={this.state.active === index ? 'nav-link active' : 'nav-link'} -
感谢@DimitarChristoff
标签: javascript reactjs