这是我的导航组件:
import React from 'react'
class Navigation extends React.Component {
constructor(props) {
super(props);
this.state = {
type: 'signUp', // or login
showModal: false,
isLoggedIn: false,
}
}
...some code
render() {
const { showModal, type, isLoggedIn } = this.state
console.log(this.props.location); // all problem is this, I'm not getting it in console
return(
...some more code
)
}
}
export default withRouter(Navigation)
这是在app.js中使用它的地方
class App extends React.Component {
render () {
return(
<Router>
<Fragment>
<Navigation /> // <= right there
<Switch>
<Route exact path='/' component={HomePage}/>
<Route exact path='/search' component={HomePage}/>
<Route component={Lost} />
</Switch>
</Fragment>
</Router>
)
}
}
我想在我的match
组件中获取更新的路线道具,例如location
和history
和<Navigation />
,但是我只有在第一次将该组件安装在DOM上时,在我的其他组件中,我使用window.history.pushState
更新了路由,但是在浏览器中的链接更新后,我无法从withRouter获取路由支持。
我用window.history.pushState
更新路线,因为:
我无法找到任何方法来更新地址栏中的链接,而不会显示用户或使用React Router DOM将用户重定向到新组件(我是否以正确的方式进行操作?)
< / li>基于此,然后我使用window.location.pathname
向某些组件添加一些特定样式)
答案 0 :(得分:2)
withRouter
为您提供最接近的<Route>
的路线道具,并且由于Navigation
组件不在Route
内,因此您不会得到route props
您可以例如将Navigation
组件放在将始终可见的Route
之外的Switch
上。
示例
class App extends React.Component {
render() {
return (
<Router>
<Fragment>
<Route path="/" component={Navigation} />
<Switch>
<Route exact path="/" component={HomePage} />
<Route exact path="/search" component={HomePage} />
<Route component={Lost} />
</Switch>
</Fragment>
</Router>
);
}
}