当前位置: 首页 > 知识库问答 >
问题:

react路由器domv4中的多个嵌套路由

许照
2023-03-14

我需要多个嵌套路由

我用的是react-router-dom的v4

我有我的

import { BrowserRouter as Router, Route } from 'react-router-dom';

我需要组件渲染成这样

--- Login
--- Home
    --- Page 1
    --- Page 2
    --- Page 3
--- About
--- etc

Home组件包含Page1、Page2和Page3组件共有的标题组件,但不存在于Login和About中。

我的js代码是这样读的

<Router>
    <div>
        <Route path='/login' component={Login} />
        <Home>
            <Route path='/page1' component={Page1} />
            <Route path='/page2' component={Page2} />
            <Route path='/page3' component={Page3} />
        </Home>
        <Route path='/about' component={About} />
    </div>
</Router>

我希望登录组件只显示在 /login当我请求 /page1、 /page2、 /page3时,它们应该分别包含主页组件和该页面的内容。

取而代之的是呈现的登录组件,在该页面下方呈现的是Page1的组件。

我很确定我错过了一些非常琐碎的事情,或者在某个地方犯了一个非常愚蠢的错误,我将非常感激能得到的所有帮助。这两天我一直在忙这个。

共有3个答案

尉迟浩思
2023-03-14

本周我遇到了同样的问题,我认为该项目正在经历一段混乱的时期,因为所有的文档、示例和视频都是以前版本的,而版本4的文档都是混乱的
这就是我完成工作的方式,如果有帮助,请告诉我

import React, { Component } from 'react';

import { BrowserRouter, Route, Switch } from 'react-router-dom';

import Root from './Root';
import Home from './Home';
import About from './About';

import './App.css';

class App extends Component {
    render() {
        return (
            <BrowserRouter>
                <div>
                    <Root>
                       <Switch>
                            <Route exact path="/" component={Home} />
                            <Route path="/home" component={Home} />
                            <Route path="/about" component={About} />
                        </Switch>
                    </Root>
                </div>
            </BrowserRouter>
        );
    }
}

export default App;
乜坚成
2023-03-14

在路由器v4中使用交换机组件

<Router>
<Switch>
  <Route path='/login' component={Login} />
  <Route path='/about' component={About} />
  <Home>
    <Route component={({ match }) =>
      <div>
        <Route path='/page1' component={Page1} />
        <Route path='/page2' component={Page2} />
        <Route path='/page3' component={Page3} />
      </div>
    }/>
  </Home>
</Switch>
export default class Home extends Component {
render() {
    return (
      <div className="Home">
          { this.props.children }
      </div>
    )
  }
}

我认为这段代码展示了使用组件的基本思想。

顾光明
2023-03-14

使用从propsthis.props.match.path获得的url/path匹配来获取设置为组件的路径。

定义你的主要路线如下

<Router>
  <div>
    <Route exact path="/" component={DummyIndex} /> {/* Note-1 */}
    <Route path="/login" component={Login} />
    <Route path="/home" component={Home} />
    <Route path="/about" component={About} />
    <Route path="/etc" component={Etc} />
  </div>
</Router>

然后在Home组件中定义路线

class Home extends Component {
  render() {
    return <div>
      <Route exact path={this.props.match.path} component={HomeDefault} />
      <Route path={`${this.props.match.path}/one`} component={HomePageOne} />
      <Route path={`${this.props.match.path}/two`} component={HomePageTwo} />
    </div>
  }
}

定义的路线如下所示

  • /登录
  • /主页
  • /首页/一页
  • /首页/两页
  • /关于
  • /等

如果您想在HomePageOne中进一步嵌套路由,如/home/one/a和/home/one/b,可以采用相同的方法。

注-1:如果你不想进一步嵌套,只需设置与prop确切路由

编辑(2017年5月15日)

最初,我使用了props.match.url,现在我将其更改为props.match.path

我们可以使用props.match.path而不是props.match.url,这样如果您在顶级路由中使用路径参数,您可以通过<--plhd在内部(嵌套)路由中获得它--2/>.

如果你没有任何路径参数,props.match.url就足够了

 类似资料:
  • 如果我将路由折叠起来,这样看起来就像: 工作很好。我嵌套的原因是因为我将在“dashboard”下有多个子项,并且希望它们都在URL中以为前缀。

  • 我在想这样的事情: 前台有一个不同的布局和风格与管理区域。所以在frontpage中的路由是home、about等等,其中一个应该是子路由。 /home应该呈现到Frontpage组件中,而/admin/home应该呈现在后端组件中。 最终解决方案: 这是我现在使用的最终解决方案。这个例子也像传统的404页面一样有一个全局错误组件。

  • 问题内容: 我在react-router-dom中需要多个嵌套路由 我正在使用v4的react-router-dom 我有我的 我需要像这样渲染的组件 Home组件包含一个Page1,Page2和Page3组件共有的Header组件,但在Login和About中不存在。 我的js代码看起来像这样 我希望Login组件仅在/ login上显示当我请求/ page1,/ page2,/ page3时,

  • 问题内容: 我正在React-Router中设置一些嵌套路由(我正在使用v0.11.6),但是每当我尝试访问其中一个嵌套路由时,都会触发父路由。 我的路线如下所示: 如果我将路线折叠起来,它看起来像: 它工作正常。之所以要嵌套,是因为我将在“仪表盘”下有多个子代,并希望它们在URL中都带有前缀。 问题答案: 配置与路由无关(尽管有名称),而是与路径驱动的布局有关。 因此,使用此配置: 就是说要嵌入

  • 问题内容: 我已经在应用程序中将React Router升级到了版本4。但是现在我得到了错误 此路由有什么问题? 问题答案: IndexRoute和browserHistory在最新版本中不可用,并且Routes不接受带有v4的子级Routes,您可以在组件本身中指定Routes 然后在主要部分 同样在汽车组件中 您将拥有

  • 问题内容: 我有以下路由配置: GuaranteeLoggedInContainer为: 但是,历史的推动力:没有用。这里没有历史。 如果我使用这样的配置: 我遇到类似的问题: reactjs中最好的身份验证方法是什么? 问题答案: 从我对您的React Router设计的了解中,您似乎正在使用React Router版本4 在这种情况下,您可以在组件本身中指定路由,并利用withRouter进行