Ben*_*ick 5 reactjs react-router react-dom react-router-dom
有没有办法可以只为 React Router 中的某些路由隐藏我的页眉?我现在的问题是我的App组件呈现我的Main组件,其中包含 my BrowserRouter,而 myHeader在我的App组件中呈现,所以我无法根据路由路径呈现标题。
这是一些代码:
App.js
import React from 'react';
import {BrowserRouter} from 'react-router-dom';
import Main from './Main';
import Header from './Header';
import Footer from './Footer';
const App = () => (
<BrowserRouter>
<Header/>
<Main/>
<Footer/>
</BrowserRouter>
);
export default App;
Run Code Online (Sandbox Code Playgroud)
Main.js
import React from 'react';
import {Route, Switch} from 'react-router-dom';
import Home from './Home';
import Login from './Login';
const Main = () => (
<main>
<Switch>
<Route exact path='/' component={Home}/>
<Route exact path='/login' component={Login}/>
</Switch>
</main>
);
export default Main;
Run Code Online (Sandbox Code Playgroud)
在这个应用程序中,我想隐藏登录页面上的页眉和页脚。
您可以使用 withRouter 高阶组件来访问 App 组件中的 props.location 对象,并使用以下命令检查用户是否位于登录或注册页面props.location.pathname
import {BrowserRouter, withRouter} from 'react-router-dom'
const App = () => (
<BrowserRouter>
{
props.location.pathname!=='/login' ? <Header/>:null
}
<Main/>
<Footer/>
</BrowserRouter>
);
export default withRouter(App);
Run Code Online (Sandbox Code Playgroud)
我最终使用了 Redux。这是最好的选择,因为我有二十多个页面(下面的代码中仅显示了 3 个页面),所有这些页面的页眉/页脚的可见性各不相同。我为页眉创建了一个减速器,为页脚创建了一个减速器。这是我的解决方案:
import ...
class App extends React.Component {
render() {
return (
<BrowserRouter>
{this.props.header ? <Header/> : ''}
<Switch>
<Route exact path='/' component={Home}/>
<Route exact path='/login' component={Login}/>
<Route exact path='/signup' component={Signup}/>
</Switch>
{this.props.footer ? <Footer/> : ''}
</BrowserRouter>
);
}
}
const mapStateToProps = state => state;
export default connect(mapStateToProps)(App);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5488 次 |
| 最近记录: |