使用 React Router 和路由器

IT技术 reactjs react-router
2021-04-13 14:12:06

使用withRouter()时如何获取路由上下文、位置、参数等

import { withRouter } from 'react-router';

const SomeComponent = ({location, route, params}) => (
    <h1>The current location is {location.pathname}</h1>
);

const ComposedWithRouter = withRouter(SomeComponent);

您可以使用 withRouter 获取该信息还是必须将这些内容显式传递到组件树中?

2个回答

所以,不再使用context了。这一切都在props中可用:

SomeComponent.propTypes = {
  location: React.PropTypes.shape({
    pathname: React.PropTypes.string,
    query: React.PropTypes.shape({
      ...
    })
  }),
  params: React.PropTypes.shape({
    ...
  }),
  router: React.PropTypes.object
}

const ComposedWithRouter = withRouter(SomeComponent);

那么让我们说SomeComponent你想把用户送到一个新的路线,你只需要做this.props.router.push('someRoute')

那么唯一的解决方案是显式地将 props 传递给子组件?如果您想制作和分发 <BreadCrumbs /> 组件怎么办?
2021-05-27 14:12:06
好吧,这取决于您希望它与路由器的关联程度。如果说您只关心将它分发给使用 的人react-router,那么实际上导出BreadCrumbs, you would export withRouter(BreadCrumbs)` 而不是这样,它始终可以访问路由器/位置。
2021-06-21 14:12:06

在 react-router 2.7 版中添加了通过 withRouter 获取位置等。Dan Abramov 建议升级到 3.0 以与路由器一起使用。在 2.7 之前,它只提供了一组功能。