我需要多个嵌套路由
我用的是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的组件。
我很确定我错过了一些非常琐碎的事情,或者在某个地方犯了一个非常愚蠢的错误,我将非常感激能得到的所有帮助。这两天我一直在忙这个。
本周我遇到了同样的问题,我认为该项目正在经历一段混乱的时期,因为所有的文档、示例和视频都是以前版本的,而版本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;
在路由器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>
)
}
}
我认为这段代码展示了使用组件的基本思想。
使用从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进行