如何在React Router v4中访问<Route />之外的历史对象

Tah*_*sin 10 react-router react-router-v4

我有以下代码:

import {
  BrowserRouter as Router,
  Route,
  Link
} from 'react-router-dom'


const Routes = () => (
  <Router basename="/blog">
    <div>
      <Header />
      <Route exact path="/" component={Main}/>
      <Route path="/article/:id" component={ArticleView}/>
    </div>
  </Router>
)
Run Code Online (Sandbox Code Playgroud)

我可以通过Main和ArticleView组件中的props访问历史记录或匹配.但我无法访问它<Header />.有没有办法在Header组件中获取历史对象?

Tyl*_*nis 24

您可以使用withRouter HOC.

在定义了Header组件的位置,将导出包装在withRouter调用中,如下所示,将使您的Header组件可以访问匹配,位置和历史记录

import {withRouter} from 'react-router'

class Header extends Component {
  static propTypes = {
    match: PropTypes.object.isRequired,
    location: PropTypes.object.isRequired,
    history: PropTypes.object.isRequired
  }
  render () {
    const { match, location, history } = this.props

    return <h2>The Header</h2>
  }
}

export default withRouter(Header)
Run Code Online (Sandbox Code Playgroud)

  • 泰勒的回答是正确的.您可以通过两种方式访问​​历史记录,匹配​​或位置:1.通过`withRouter`包装器2.通过将Header传递给Route:`<Route component = {Header} />` (7认同)
  • 我认为withRouter仅在组件是<Route />的一部分时才有效.如果我错了,请纠正我.谢谢 :) (3认同)
  • 如果组件是<Route />的一部分,那么就不需要使用withRouter.除非我感到困惑. (2认同)
  • 嘿@Tayler,你很困惑哈哈。我的 &lt;Header /&gt; 不是 &lt;Route /&gt; 的一部分。它在 &lt;Router /&gt; 内,但不在 &lt;Route /&gt; 内。所以我无法从那里访问这些道具。 (2认同)