【问题标题】:React Router v4 nested route to change the entire contentReact Router v4 嵌套路由更改整个内容
【发布时间】:2018-06-22 07:29:10
【问题描述】:

我一直在尝试了解如何将嵌套路由的概念应用于我的范围。

我需要这些路线:

/projects

  • 标题
  • 列表
  • NavLink 到 /projects/new

这条路线将有一个项目列表和一个用于创建新项目的按钮。

/projects/new

  • 表格
  • NavLink 关闭并转到 /projects

调用该路由时,内容上方会出现一个面板,不会改变页面项目。

/projects/:projectId/dashboard

  • 仪表板标题
  • 项目列表

当一个项目被选中时,我需要在一个全新的页面中显示它的仪表板,与 /projects 不同

我的反应路线配置:

<Switch>
  <Route exact path='/home' component={Home}/>
  <Route path='/home' component={Home}/>
  <Route path='/projects' component={Projects} />
  <Redirect to="/home" push />
</Switch>

我在项目内的渲染接收另一条路线:

<section className='content projects'>
  <div>
    <h3>List</h3>
    <ul>{list}</ul>
  </div>

  <Route path='/projects/new' render={
    () => {
      return <div>
        <h3>New Project</h3>
        <form action="#">
          <input type="text" placeholder='Contract name'/>
          <input type="text" placeholder='Project name'/>
          <button type="submit">Create</button>
        </form>
        <NavLink to='/projects'>Close</NavLink>
      </div>
    }
  } />
</section>

现在,我应该把这条路线放在哪里:

<Route path='/projects/:projectId/dashboard' component={Dashboard} />

我想如果我把开关放在里面,就可以了,但是页面变成了空白。

谁能帮我解决这个问题? =)

谢谢!


更新 1

我试图将我的仪表板路线准确地放在 /projects 之上。 现在我得到一个空白内容,它应该出现在仪表板组件的位置。项目路线依然正常。

<Switch>
  <Route exact path='/' component={Home}/>
  <Route exact path='/projects/:projectId/dashboard' render={ () => {
      return <h2>Dashboard</h2>
  }} />
  <Route path='/projects' component={Projects} />
  <Redirect to="/home" push />
</Switch>

更新 2

我创建了一个单独的项目,它工作与本主题中的答案。现在我将尝试弄清楚为什么它在我有空白页的项目中不起作用。

【问题讨论】:

    标签: javascript reactjs react-router single-page-application


    【解决方案1】:

    尝试将 exact 属性添加到 Route 并确保它出现在 /projects 之前的 Switch 中:

    <Switch>
      <Route exact path='/home' component={Home}/>
      <Route path='/home' component={Home}/>
      <Route exact path='/projects/:projectId/dashboard' component={Dashboard} />
      <Route path='/projects' component={Projects} />
      <Redirect to="/home" push />
    </Switch>
    

    发生的情况是您的第一个 /projects 匹配任何以 /projects 开头的路由。添加exact 属性将确保如果路由完全匹配/projects/:projectId/dashboard,它将呈现Dashboard

    【讨论】:

    • 嗨!谢谢!我试过你说的,但现在当它尝试仪表板路线时我得到一个空白内容。你知道为什么吗?我已经用更新更新了上面的问题。再次感谢。
    猜你喜欢
    • 2017-08-28
    • 2019-01-07
    • 2017-06-25
    • 2017-11-11
    • 1970-01-01
    • 2017-08-16
    • 2017-10-05
    • 2017-07-04
    相关资源
    最近更新 更多