Reactjs 在react路由器dom中的某些页面上隐藏标头

Reactjs 在react路由器dom中的某些页面上隐藏标头,reactjs,react-router,react-router-dom,react-dom,Reactjs,React Router,React Router Dom,React Dom,在React路由器中,有没有一种方法可以只隐藏某些路由的页眉?我现在的问题是,我的应用程序组件呈现我的主组件,其中包含我的BrowserRouter,而我的头在我的应用程序组件中呈现,因此我无法基于路由路径呈现头 下面是一些代码: App.js 在此应用程序中,我想隐藏登录页面上的页眉和页脚。您可以使用withRouter高阶组件访问应用程序组件中的props.location对象,并检查用户是否使用props.location.pathname登录或注册页面 我最终使用了Redux。这是最好的

在React路由器中,有没有一种方法可以只隐藏某些路由的页眉?我现在的问题是,我的应用程序组件呈现我的主组件,其中包含我的BrowserRouter,而我的头在我的应用程序组件中呈现,因此我无法基于路由路径呈现头

下面是一些代码:

App.js


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

您可以使用withRouter高阶组件访问应用程序组件中的props.location对象,并检查用户是否使用props.location.pathname登录或注册页面


我最终使用了Redux。这是最好的选择,因为我有20多页,下面的代码中只显示了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);

你可以这样做:

{authrouts.map{path,component:C}=> } > } {routes.map{path,component:C}=> } > } 我通常在另一个文件中定义所有路由,并按组导出它们。这使我能够:

在一个位置定义所有布线 更干净地处理不同的路由组
您可以使用Context/Provider/Consumer来执行此操作,也可以更改逻辑,将页眉和页脚作为主页的子项,而不是登录页。您也可以使用专门针对mobx用户界面的存储来完成此操作。@kemicofa如果我将页眉和页脚作为主页的子项而不是登录页,那么在导航到另一个也有页眉和页脚的页面时,它们不会被重新呈现吗?是的,您是对的,但这不是一个繁重且最简单的解决方案。但是,如果您希望保持当前设置,请查看此推荐的或。他们都能解决这个问题。您最终可以使用refs,但这是反模式的,最好远离它。
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;
import {BrowserRouter, withRouter} from 'react-router-dom'
const App = () => (
   <BrowserRouter>

     {
      props.location.pathname!=='/login' ? <Header/>:null
     }
        <Main/>
        <Footer/>

   </BrowserRouter>
);

export default withRouter(App);
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);