项目时,我犯了一个错误。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 '' }