在 react-router-dom 中的某些页面上隐藏标题

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)

在这个应用程序中,我想隐藏登录页面上的页眉和页脚。

San*_*lah 6

您可以使用 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)


Ben*_*ick 3

我最终使用了 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)