Как и многие другие, наш значок гамбургера React- Bootstrap расширяется очень хорошо, но при выборе одной из ссылок меню навигации остается расширенным. Очевидно, это может иметь какое-то отношение к редактированию React-Router, которое произошло задолго до того, как я начал работать над этим кодом, но ни одно из решений, которые я видел, не работает для этой проблемы.
Я пытался использовать ловушку для отключения обработчиков кликов по ссылкам, но безрезультатно. Кроме того, положить развернутый / свернутый в состояние не получилось (если я не сделал это неправильно). Кто-нибудь знает решение для этого? Спасибо
Это NavBar
class BSNavbar extends React.Component {
constructor(props) {
super(props)
this.state = { supportModal: false, loginModal: false, infoPanel: false }
this.loginModal = this.loginModal.bind(this)
this.supportModal = this.supportModal.bind(this)
}
loginModal(open = true) {
this.setState({ loginModal: open })
}
supportModal(open = true) {
this.setState({ supportModal: open })
}
infoModal(open = true) {
this.setState({ infoPanel: open })
}
render() {
return (
<>
<Navbar collapseOnSelect>
<Navbar.Header>
<Navbar.Brand>
<WebsiteBrandIcons />
</Navbar.Brand>
<Navbar.Toggle />
</Navbar.Header>
<Navbar.Collapse>
<NavMenu
loginModal={this.loginModal}
supportModal={this.supportModal}
/>
</Navbar.Collapse>
</Navbar>
<NavbarSpacer />
{this.state.supportModal && (
<Overlay>
<ModalContainer>
<ExitButton
onClick={() => this.setState({ supportModal: false })}>
×
</ExitButton>
<h3>Support</h3>
<FreshdeskWidget />
</ModalContainer>
</Overlay>
)}
<LoginModal
show={this.state.loginModal}
modalToggle={this.loginModal.bind(this)}
min={true}
/>
</>
)
}
}
Это компонент NavMenu NavBar (где ссылки)
const FaqLink = ({ faq }) => {
if (faq && faq.length) {
return (
<NavLink className="nav-link" to="/faq">
<span className="link-name">faq</span>
</NavLink>
)
} else {
return null
}
}
const SupportLink = ({ supportModal }) => {
if (config.support.url) {
return (
<li className="link-support">
<a className="nav-link" onClick={() => supportModal()}>
<span className="link-name">Support</span>
</a>
</li>
)
} else {
return null
}
}
const NavMenu = ({ supportModal, loginModal }) => {
return (
<ul className="nav navbar-nav main-nav">
<li className="link-dashboard">
<LoggedIn>
<NavLink className="nav-link" to="/dashboard/datasets">
<span className="link-name">My Dashboard</span>
</NavLink>
</LoggedIn>
</li>
<li className="link-public">
<NavLink className="nav-link" to="/public/datasets">
<span className="link-name">Public Dashboard</span>
</NavLink>
</li>
<SupportLink supportModal={supportModal} />
<li className="link-faq">
<FaqLink faq={faq} />
</li>
<li className="link-dashboard">
<LoggedIn>
<UploaderView />
</LoggedIn>
</li>
<li>
<Navbar.Collapse>
<Usermenu />
<LoggedOut>
<div className="navbar-right sign-in-nav-btn">
<button className="btn-blue" onClick={() => loginModal()}>
<span>Sign in</span>
</button>
</div>
</LoggedOut>
</Navbar.Collapse>
</li>
</ul>
)
}