Я пытаюсь сделать простой NavBar с React.js.Проблема, в которой я оказался, заключается в циклическом переключении всех навигационных кнопок и удалении «активного» className, а затем добавлении «активного» только к одной нажатой кнопке.
Мне удалось создать состояние, которое переключает «активный»на true
на элементе, по которому щелкнули, который затем в атрибуте className
делает это оператор If:
className={this.state.active ? "nav-item nav-link active" : "nav-item nav-link"}
Вот полный код:
import React, { Component } from 'react';
class NavButton extends Component {
state = {
active: false
}
setActive = () => {
this.setState({
active: !this.state.active
})
}
render() {
return (
<a
className={this.state.active ? "nav-item nav-link active" : "nav-item nav-link"}
href={this.props.href}
onClick={this.setActive}> {this.props.title}
</a>
)
}
}
class NavBar extends Component {
buttons = [
{
title: "Home",
key: 0
},
{
title: "Team",
key: 1
},
{
title: "Discord",
key: 2
},
{
title: "Gallery",
key: 3
},
{
title: "Download",
key: 4
}
]
render() {
return (
<nav className="navbar" id="navbarMain">
<div></div>
<div className="navbar-nav flex-row">
{this.buttons.map(button => <NavButton title={button.title} key={button.key} />)}
</div>
<div></div>
</nav>
)
}
}
export default NavBar
Это работает, только для одного элемента (не против того, что активное состояние переходит false
, когда оно true
. Проблема в том, как бы я сделал это способом React, чтобы удалить активное имя класса во всех других кнопках?
С простым JS у меня нет проблем с этим, я просто перебираю все элементы, которые имеют className "navbar-item" и устанавливаю их имена классов без "active", затем добавляю "active" кпрессованный элемент, как в этом примере https://www.w3schools.com/howto/howto_js_tabs.asp
Сможете ли вы, ребята, помочь и скажите мне, как лучше всего отреагировать на это?
Очень признателен!