反应路由器和嵌套路由

Posted

技术标签:

【中文标题】反应路由器和嵌套路由【英文标题】:React router and nested routes 【发布时间】:2016-08-18 05:20:42 【问题描述】:

我对如何创建以下(非常简单的)路由结构感到困惑。

我有一个应用,它有一个登录组件的***路由:

以及应用程序本身的另一个***路由(我们称之为 Home 组件):

现在,Home 组件有一个标题、一个侧边栏和子视图的主要空间。

登录组件应显示在/login 路径;这很简单。但让我感到困惑的是,我希望 / 路径在主视图中显示带有特定子组件(我们称之为 Welcome)的 Home 组件。此外,我能想到的大多数其他路由都应该在 Home 组件中呈现子组件。

所以,重申一下:

path / 渲染 Home 组件,其中包含 Welcome 组件

path /foo 渲染 Home 组件,其中包含 Foo 组件

...

path /login 渲染登录组件

感觉我在想的结构是:

  <Route path='/' component=App>
    <IndexRoute component=Home>
        <IndexRoute component=Welcome>
        <Route path='foo' component=Foo/>
    </IndexRoute>
    <Route path='login' component=Login/>
  </Route>

但这显然是错误的。实现这种路由结构的正确方法是什么?

【问题讨论】:

听起来您应该在 Welcome 组件中包含 Login 组件。在 Welcome 组件中创建一个渲染函数来渲染 Login 或 Welcome 组件,这取决于他们是否已登录。 【参考方案1】:

这可能是一个很好的解决方案,试一试。

<Route component=App>
  <Route path="/" component=Home>
    <IndexRoute component=Welcome/>
    <Route path="/foo" component=Foo/>
  </Route>
  <Route path="/login" component=Login/>
</Route>

【讨论】:

耶!这完美!感谢您的解决方案。

以上是关于反应路由器和嵌套路由的主要内容,如果未能解决你的问题,请参考以下文章

嵌套反应路由器兄弟

如何使反应路由器与静态资产、html5 模式、历史 API 和嵌套路由一起工作?

反应嵌套路由无法正常工作

嵌套反应路由器组件不会在页面重新加载时加载/渲染?

vue-router 嵌套路由没反应

在 react-router v4 的嵌套路由中看到空白页