将位置传递给 BrowserRouter 的子节点 - React Router

Posted

技术标签:

【中文标题】将位置传递给 BrowserRouter 的子节点 - React Router【英文标题】:Passing location into children of BrowserRouter - React Router 【发布时间】:2018-09-16 19:17:53 【问题描述】:

我有以下代码:

  <BrowserRouter>
    <IndexComponent />
  </BrowserRouter>

在里面我有一个带有所有路线的开关。

IndexComponent.js:

<Switch >
  <Route exact path="/course_info/:id" component=CourseInfoPage />
    <Route exact path="/"  component=Main />
    .
    .
    .
</Switch>

我想访问 IndexComponent 中的 location 属性,以便像这样添加过渡动画:

<CSSTransition key=location.key classNames="fade" timeout=300>
  <Switch location=location>
    <Switch >
      <Route exact path="/course_info/:id" component=CourseInfoPage />
        <Route exact path="/"  component=Main />
        .
        .
        .
    </Switch>
  </CSSTransition>
</TransitionGroup>

如您所见,我需要 IndexComponent 中的 location 属性。 但它不存在于那里。为什么不,我应该如何添加它?

【问题讨论】:

这可能会帮助你***.com/questions/44009618/… 【参考方案1】:

我认为传递位置道具的唯一方法是使用&lt;Route /&gt;

  <BrowserRouter>
    <Route render=(props) => <IndexComponent location=props.location/> > </Route>
  </BrowserRouter>

那就做吧

<CSSTransition key=this.props.location classNames="fade" timeout=300>

【讨论】:

或withRouter HOC,不过&lt;Route component=IndexComponent /&gt;也可以使用 @ShubhamKhatri 如果你这样做 &lt;Route component=IndexComponent /&gt; 不应该使用 render 而不是 component 这样你就可以访问 match location history 道具等? 使用component 所有道具都将传递给IndexComponent,如果您使用渲染,它会在回调中将道具返回给您,您可以决定有选择地传递给组件。但是,如果您需要传递一些自定义道具,大多数情况下您会使用渲染。你可以检查这个***.com/questions/44255415/…

以上是关于将位置传递给 BrowserRouter 的子节点 - React Router的主要内容,如果未能解决你的问题,请参考以下文章

如何将图像位置传递给 Vue 中的子组件?

BrowserRouter 链接覆盖 onClick 事件

Perl 将变量传递给子程序

如何将道具传递给vue中的子组件

将变量传递给 Vue.js 中的子组件

将计时器传递给 SwiftUI 中的子视图