只有设置了Route路由的组件,才可以通过this.props.match接受到


项目时,我犯了一个错误。Header我没有设置路由,作为工作组件,然后想在Header组件内部根据路由,隐藏Header,但是因为Header没有用Route包裹,也没有用withRouter,其内部是接受不到this.prop.match,this.prop.location,this.prop.history, 因为这三个属性是父组件Route给他们传递的,而这时候你的Header只是普通组件。

      <Provider store={store}>
                <BrowserRouter>
                    <Header/>
                    <Route exact path="/" component={Home}></Route>
                    <Route exact path="/home" component={Home}></Route>
                    <Route exact path="/login" component={Login}></Route>
                    <Route exact path="/detail/:id" component={Detail}></Route>
                </BrowserRouter>
            </Provider>

正确做法是,将Header也用Route包裹

    <Provider store={store}>
                <BrowserRouter>
                    <Route path="/" component={Header}/>
                    <Route exact path="/" component={Home}></Route>
                    <Route exact path="/home" component={Home}></Route>
                    <Route exact path="/login" component={Login}></Route>
                    <Route exact path="/detail/:id" component={Detail}></Route>
                </BrowserRouter>
            </Provider>

然后就可以在Header内部获取this.props.location,我们即可以根据需要来返回Header内容还是‘’空字符串

if(this.props.location.pathname.indexOf("/login")!==-1){
      return ''
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM