【发布时间】:2020-05-02 16:49:09
【问题描述】:
我已经看到了多个与此相关的问题,并且我都尝试了所有这些问题,但没有任何结果。因此,发布另一个看似重复的问题。
我试图在导航栏中突出显示当前页面按钮。对于简单的示例,我没有将其路由到新页面,它可以工作。但是当我将它路由到不同的页面(一个单独的反应组件)时,它就不起作用了。
这是我的代码:
App.jsx:
class App extends Component {
render() {
return (
<BrowserRouter>
<div>
<Route exact={true} path='/' component={HomeApp}/>
<Route path='/form' component={SomeForm}/>
</div>
</BrowserRouter>
);
}
}
NavigationBar.jsx
class NavigationBar extends Component {
componentDidMount() {
toggleIcon();
}
render() {
return (<div id="topheader">
<nav className="navbar navbar-expand-lg navbar-light bg-light ">
<a className="navbar-brand" href="#">Whatever</a>
<button className="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span className="navbar-toggler-icon"></span>
</button>
<div className="collapse navbar-collapse" id="navbarNav">
<ul className="navbar-nav nav nav-pills ml-auto">
<li className="nav-item active">
<a className="nav-link" href="/">Home <span className="sr-only">(current)</span></a>
</li>
<li className="nav-item">
<a className="nav-link" href="/form">Submit Form</a>
</li>
<li className="nav-item">
<a className="nav-link" href="#">Sign Up</a>
</li>
<li className="nav-item">
<a className="nav-link " href="#">Login</a>
</li>
</ul>
</div>
</nav>
</div>
)
}
}
export default NavigationBar
navigation.js
import $ from 'jquery';
export function toggleIcon() {
$( '#topheader .navbar-nav a' ).on( 'click', function () {
$( '#topheader .navbar-nav' ).find( 'li.active' ).removeClass( 'active' );
$( this ).parent( 'li' ).addClass( 'active' );
});
}
正如所见,当我单击 Sign Up 或 Login 时突出显示有效,因为它们没有被路由到任何其他组件。
但是当我点击路由到SomeForm 组件的Submit Form 时,突出显示又回到Home 按钮。
更多详情,我贴出HomeApp和SomeForm组件的内容:
HomeApp.jsx
class HomeApp extends Component {
render() {
return (
<div className="container">
<NavigationBar/>
<Jumbotron/>
</div>
)
}
}
export default HomeApp
SomeForm.jsx
class SomeForm extends Component {
render() {
return (<>
<div className="container">
<NavigationBar>
</NavigationBar>
</div>
</>
)
}
}
export default SomeForm
【问题讨论】:
-
既然你用的是react-router,为什么不用
组件代替标签呢?使用它之后,它已经具有开箱即用的活动链接支持。你可以看看这个问题stackoverflow.com/questions/41131450/…。您还可以查看以下文档:github.com/ReactTraining/react-router/blob/master/packages/…
标签: reactjs bootstrap-4 react-router react-bootstrap