当前位置: 首页 > 面试题库 >

react-router在子组件中获取this.props.location

姬俊驰
2023-03-14
问题内容

据我所知,<Route path="/" component={App} />将提供App与路由相关的道具,例如locationparams。如果我的App组件有许多嵌套的子组件,那么我如何在不使用以下子项的情况下获取子组件:

  • 从App传递道具
  • 使用窗口对象
  • 为嵌套的子组件创建路线

我以为this.context.router会有一些与路线有关的信息,但this.context.router似乎只有一些功能可以操纵路线。


问题答案:

(更新)V5.1和Hooks(需要React > = 16.8)

您可以使用useHistoryuseLocationuseRouteMatch在你的组件来获得matchhistorylocation

const Child = () => {
  const location = useLocation();
  const history = useHistory();
  const match = useRouteMatch("write-the-url-you-want-to-match-here");

  return (
    <div>{location.pathname}</div>
  )
}

export default Child

(更新)V4和V5

您可以使用withRouter,以HOC注入matchhistorylocation在组件的道具。

class Child extends React.Component {
  static propTypes = {
    match: PropTypes.object.isRequired,
    location: PropTypes.object.isRequired,
    history: PropTypes.object.isRequired
  }

  render() {
    const { match, location, history } = this.props

    return (
      <div>{location.pathname}</div>
    )
  }
}

export default withRouter(Child)

(更新)V3

您可以使用withRouterHOC以注入routerparamslocationroutes在组件中的道具。

class Child extends React.Component {

  render() {
    const { router, params, location, routes } = this.props

    return (
      <div>{location.pathname}</div>
    )
  }
}

export default withRouter(Child)

原始答案

如果您不想使用道具,可以使用React Router文档中所述的上下文

首先,你必须设置你的childContextTypesgetChildContext

class App extends React.Component{

  getChildContext() {
    return {
      location: this.props.location
    }
  }

  render() {
    return <Child/>;
  }
}

App.childContextTypes = {
    location: React.PropTypes.object
}

然后,您将可以使用这样的上下文访问子组件中的location对象

class Child extends React.Component{

   render() {
     return (
       <div>{this.context.location.pathname}</div>
     )
   }

}

Child.contextTypes = {
    location: React.PropTypes.object
 }


 类似资料:
  • 问题内容: 我希望能够弄清楚哪些React组件与某个DOM元素相关联。 例如,假设我有一个div,并且正在使用React渲染整个应用程序。div必须由React组件呈现-但是哪一个呢? 我知道React提供了方法“ getDOMNode ”来获取与React组件相关联的DOM节点,但是我想做相反的事情。 这可能吗? 问题答案: 没有。 React中的中心概念是您实际上在DOM中没有控件。相反,您的

  • 问题内容: 我正在开发一个React应用程序。我有一个Loading组件,这是一个等待动画的动画。我想根据调用它的组件在此Loading组件中添加一条消息。 这是我如何调用我的Loading组件(this.state.displayLoading为true或false): 我想在我的变量loadingFrom中获取“ LoginForm”,它是className。也许这不是正确的方法。 问题答案:

  • 问题内容: 我正在尝试通过我的应用程序建立路由器链接, 在这种情况下,我有三个文件。 我在Book的内部建立了一个仅在悬停时才会出现(在书的封面上) 这将带我到/ details / 12345(isbn10号) 我很难理解的是例如在按下时如何 操作,或者是否可以在以后使用零件创建像过滤器一样的方法 由于在将安装成… 后来,我想抓住它,这样我就可以将自己的内部 问题答案: 为了在您的组件中接收路径

  • 问题内容: 我开始使用react-router v4。我的app.js中有一个简单的导航链接(请参见下面的代码)。如果我导航到,路由器会将我重定向到正确的页面。但是,当我在之后按重新加载(F5)()时,所有内容消失并且浏览器报告。那怎么可能?有人可以给我任何解决方法的提示(正确重新加载页面)吗? App.js: 问题答案: 我假设您正在使用Webpack。如果是这样,请在您的webpack配置中添

  • 我开始使用React-RouterV4。我的app.js中有一个简单的和一些导航链接(参见下面的代码)。如果导航到,router会将我重定向到右侧页面。但是,当我之后按reload(F5)()时,所有内容都会消失,浏览器报告。这怎么可能?有人能给我任何线索如何解决(重新加载正确的页面)? app.js: