我有一个反应页面,该页面根据当前路径呈现登录页面或导航栏+容器组件。我不希望导航栏在登录页面中可见。因此,我的应用程序的结构如下:
index.js
ReactDOM.render(<Main/>, document.getElementById('root'));
Main.js
<Router>
<Switch>
<Route path="/login" component={Login} />
<PrivateRoute path="/" component={App} />
</Switch>
</Router>
App.js
<Router>
<div className="App">
<Navbar/>
<div className="main-container">
<Switch>
<Route exact path="/" component={Container1}/>
<Route path="/route1" component={Container2}/>
<Route path="/route2" component={Container3}/>
</Switch>
</div>
</div>
</Router>
现在,如果要在任何容器组件内部执行this.props.history.push('/ login'),它只会影响最近的
谢谢。
答案 0 :(得分:2)
技巧是删除App.js中多余的
答案 1 :(得分:0)
您可以定义不同的路线集。将始终显示您的导航栏的默认路由,以及其他不会显示的路由。
class App extends React.Component{
render(){
const DefaultRoutes = () => {
return(
<div>
<Navbar/>
<Switch>
<Route path="/" component={Landing} exact={true}/>
</Switch>
<Footer/>
</div>
)
}
return(
<Provider store={store}>
<BrowserRouter>
<div className="App">
<Switch>
<Route path="/alternate" component={alternateComponent} exact/>
<Route component={DefaultRoutes}/>
</Switch>
</div>
</BrowserRouter>
</Provider>
)
}
}
因此,使用此设置,您可以看到DefaultRoutes将始终使用导航栏。 但是,路径为“备用”的Route则不是这样。本质上,只需将要具有“正常”显示行为的路由包装在DefaultRoutes中即可。并定义该集合之外的任何其他路径。这要归功于Switch,它可以独家呈现路线。