【问题标题】:How to Make React Router Resolve within a nested path如何使 React Router 在嵌套路径中解析
【发布时间】:2021-09-08 18:30:56
【问题描述】:

我有点不确定这里可能出了什么问题。

我有一个 React 路由器开关,它嵌套在另一个 React 路由器开关中,如下所示

homepage.js文件的切换如下

<Switch>
       <Route path={HomePageRoutes.CONTENTS}> //which is just /contents
         <ContentPage initialData={fetchedData}/>
       <Route>
       <Route path={HomePageRoutes.ADS}>
         <AdsPage/>
       </Route>
</Switch>
         

现在,上面引用的 ContentPage 位于一个名为 contentpage.js 的文件中,该页面还包含一个开关,如下所示:

export default function ContentPage(){
 ......
     <Switch>
        <Route path={`/first`}>
             <FirstContentPage/>
        </Route>
        <Route>
            <DefaultContentPage/>
        </Route>
     </Switch>
 ......
}                       

我期待如果浏览器中的当前位置是 /content 并且我单击重定向到 /first 的链接,/first 将附加到当前位置成为 /content/firstFirstContentPage 组件应该渲染,但不幸的是它没有渲染?

我做错了什么?

感谢您的期待。

【问题讨论】:

    标签: reactjs react-router react-router-dom react-router-v4


    【解决方案1】:

    您需要从 match 属性访问当前的 path。由于ContentPage 没有接收到route props,您可能需要将ContentPage 包装在withRouter 高阶组件中。

    match

    匹配对象包含有关 &lt;Route path&gt; 如何匹配的信息 网址。匹配对象包含以下属性:

    • params - (object) 从对应于路径动态段的 URL 解析的键/值对
    • isExact -(布尔值)如果整个 URL 都匹配(无尾随字符)则为真
    • path -(字符串)用于匹配的路径模式。用于构建嵌套的&lt;Route&gt;s
    • url - (string) URL 的匹配部分。用于构建嵌套的&lt;Link&gt;s
    function ContentPage({ match }) {
      const { path } = match;
    
      ......
        <Switch>
          <Route path={`${path}/first`}>
            <FirstContentPage/>
          </Route>
          <Route>
            <DefaultContentPage/>
          </Route>
        </Switch>
      ......
    }
    
    export default withRouter(ContentPage);
    

    【讨论】:

    • 天哪!!!你刚刚为我节省了几个小时的兜兜转转。 Lolz .. 工作就像一个魅力!谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 2017-11-11
    相关资源
    最近更新 更多