【发布时间】:2019-09-05 18:16:03
【问题描述】:
我正在使用 React 开发一个登录页面。它应该对所有部分具有相同的导航栏,并且只更改其活动状态。
在 App.js 文件中,我使用了路由到导航组件的 BrowserRouter。我的问题是导航不能正常工作,它不切换组件,它只切换路径名。例如,当我按下橱柜时,它应该从主页切换到橱柜组件。我是否应该使用其他路由器进行导航?什么是最好的解决方案?
我尝试创建 NavRouter 组件,在其中放置了用于导航的路由器。
App.js 文件:
<BrowserRouter>
<Switch>
<Route path='/' exact component={ Navigation }></Route>
<Route path='/cabinet' component={ Navigation }></Route>
<Route path='/catalog' component={ Navigation }></Route>
<Route path='/company' component={ Navigation }></Route>
<Route path='/contacts' component={ Navigation }></Route>
</Switch>
</BrowserRouter>
导航文件:
class Navigation extends Component {
render() {
const { classes, location: {pathname}, children } = this.props;
return (
<div>
<MuiThemeProvider theme={color}>
<Fragment>
<nav id="menu">
<ul className="navigation">
<li>
<MenuItem component={Link} to='/' selected={'/' === pathname} className="active menuItem" className={classes.menuItemColor}>
Главная
</MenuItem>
</li>
<li>
<MenuItem component={Link} to='/cabinet' selected={'/cabinet' === pathname} className="menuItem" className={classes.menuItemColor}>
Кабинет
</MenuItem>
</li>
<li>
<MenuItem component={Link} to='/catalog' selected={'/catalog' === pathname} className="menuItem" className={classes.menuItemColor}>
Каталог
</MenuItem>
</li>
<li>
<MenuItem component={Link} to='/company' selected={'/company' === pathname } className="menuItem" className="">
Компания
</MenuItem>
</li>
<li>
<MenuItem component={Link} to='/contacts' selected={'/contacts' === pathname} className="menuItem" className="">
Контакты
</MenuItem>
</li>
</ul>
</nav>
<main className={classes.content}>
{ children }
</main>
</Fragment>
</MuiThemeProvider>
</div>
);
}
}
NavRouter.js 文件:
<BrowserRouter>
<Navigation>
<Switch>
<Route path='/' exact component={ Navigation }></Route>
<Route path='/home' component={ Home }></Route>
</Switch>
</Navigation>
</BrowserRouter>
【问题讨论】:
-
所有指向导航组件的路线,我不太了解代码,为什么不在 Navigation.js 中指定每个路径及其组件,而不是为所有路径传递导航
-
因为如果我在 App.js 中使用其组件指示路径,它将不会显示导航。它将仅显示相应的组件而不显示导航。那是问题
标签: javascript reactjs material-ui jsx