【发布时间】:2020-09-11 14:03:02
【问题描述】:
我在我的 App.js 中设置了一个路由器,如下所示:
import React from 'react';
import { BrowserRouter as Router, Route, Switch, Redirect } from 'react-router-dom';
import NavBar from './nav-bar';
import Landing from './landing-page';
import Dashboard from './dashboard';
import Analysis from './analysis';
import '../style.scss';
const App = (props) => {
return (
<Router>
<NavBar />
<Switch>
<Route exact path="/" component={Landing} />
<Route path="/dashboard/:prodID/search" component={Dashboard} />
<Redirect from="/dashboard/:prodID" to="/dashboard/:prodID/search" />
<Route path="/dashboard/:prodID/analyze" component={Analysis} />
<Route component={() => (
<div id="error">
<h1>404 ERROR</h1>
<h2>Page not found</h2>
</div>
)}
/>
</Switch>
</Router>
);
};
export default App;
而我的NavBar组件设置如下:
import React, { Component } from 'react';
import { NavLink, withRouter } from 'react-router-dom';
import { Navbar, Nav } from 'react-bootstrap';
import '../style.scss';
class NavBar extends Component {
constructor(props) {
super(props);
this.state = {};
}
render() {
return (
<Navbar id="nav-bar" bg="dark" variant="dark">
<Navbar.Brand href="/">
My Project
</Navbar.Brand>
<Navbar.Collapse id="responsive-navbar-nav" className="justify-content-end">
<Nav>
<NavLink to="/dashboard/:prodID/search">Search</NavLink>
<NavLink to="/dashboard/:prodID/analyze">Analyze</NavLink>
</Nav>
</Navbar.Collapse>
</Navbar>
);
}
}
export default withRouter(NavBar);
我有两件事想弄清楚:
- 我希望能够访问我的 NavBar 组件中的
prodID路由参数,这样当用户单击路由时,它将采用有效的prodID并正确呈现路由。 - 如果用户在具有
prodID参数的路线上,我只想在NavBar中显示NavLinks。例如,如果他们在主路由/上,则不会显示链接。但如果他们在/dashboard/[valid prodID]/search的路线上,链接就会显示出来。
我该如何实施呢?我看过其他关于 SO 处理路由参数和导航栏的帖子,但没有一个回答我的问题。任何帮助表示赞赏。
【问题讨论】:
标签: javascript reactjs routes react-router