带有react路由器v4/v5的嵌套路由

我目前正在努力使用react router v4嵌套路由

最接近的示例是
React路由器v4文档

我想把我的应用分成两个不同的部分

一个前端和一个管理区

我在想这样的事情:

<匹配模式=“/”组件={Frontpage}>
<匹配模式=“/home”组件={HomePage}/>
<Match pattern=“/about”component={AboutPage}/>
&lt/匹配>
<Match pattern=“/admin”component={Backend}>
<Match pattern=“/home”组件={Dashboard}/>
<Match pattern=“/users”component={UserPage}/>
&lt/匹配>
<未命中组件={NotFoundPage}/>

前端的布局和样式与管理区域不同。因此,在frontpage中,路线回家,大约一条路线应该是子路线

/home应呈现在Frontpage组件中,/admin/home应呈现在后端组件中

我尝试了一些变化,但我总是不点击/home或/admin/home

编辑-2017年4月19日

因为这篇文章现在有很多观点,我用最终的解决方案更新了它。我希望它能帮助别人

编辑-2017年5月8日

删除旧的解决方案

最终解决方案:

这是我现在使用的最终解决方案。这个示例还有一个全局错误组件,类似于传统的404页面

导入React,{Component}来自“React”;
从“react router dom”导入{交换机、路由、重定向、链接};
const Home=()=&gt&书信电报;部门&gt&书信电报;h1>主页&lt/h1&gt&lt/部门>;
常量用户=()=&gt&书信电报;部门&gt&书信电报;h1>用户&lt/h1&gt&lt/部门>;
常量错误=()=&gt&书信电报;部门&gt&书信电报;h1>错误&lt/h1&gt&lt/部门>
常量前端=道具=>{
console.log(“前端”);
返回(
<div>
<h2>前端</h2>
<p><链接到=“/”>根</Link></p>
<p><链接到=“/user”>用户</Link></p>
<p><链接到=“/admin”>后端</Link></p>
<p>lt;链接至=“/路线为swiggity Swoote”>swiggity swooty</Link>lt;/p>
<开关>
<路由精确路径='/'组件={Home}/>
<路由路径='/user'组件={user}/>
<重定向到={{
状态:{error:true}
}}/>
</Switch>
<页脚>底部</footer>
</div>
);
}
const Backend=props=>{
log('Backend');
返回(
<div>
<h2>后端</h2>
<p><链接到=“/admin”>根</Link></p>
<p><链接到=“/admin/user”>user</Link></p>
<p><链接到=“/”>前端</Link></p>
<p><链接至=“/admin/路线为swiggity Swoote”>swiggity swooty</Link></p>
<开关>
<路由精确路径='/admin'组件={Home}/>
<路由路径='/admin/user'组件={user}/>
<重定向到={{
状态:{error:true}
}}/>
</Switch>
<页脚>底部</footer>
</div>
);
}
类GlobalErrorSwitch扩展组件{
previousLocation=this.props.location
组件将更新(下一步){
const{location}=this.props;
如果(nextrops.history.action!=='POP'
&&(!location.state | |!location.state.error)){
this.previousLocation=this.props.location
};
}
render(){
const{location}=this.props;
常量isError=(
地点、州和;
位置、状态、错误和;
this.previousLocation!==位置//不是初始渲染
)
返回(
<div>
{          
伊瑟罗
?<路由组件={Error}/>
:<开关位置={isError?this.previousLocation:location}>
<路由路径=“/admin”组件={Backend}/>
<路由路径=“/”组件={Frontend}/>
</Switch>}
</div>
)
}
}
类应用程序扩展组件{
render(){
返回<路由组件={GlobalErrorSwitch}/>
}
}
导出默认应用程序;

在react-router-v4中不嵌套<路线/&gt。而是将它们放入另一个<组件/&gt


比如说

<路由路径='/topics'组件={topics}>
<路由路径='/topics/:topicId'组件={Topic}/>
&lt/路线>

应该成为

<路由路径='/topics'组件={topics}/>

常量主题=({match})=>(
<div>
<h2>主题</h2>
<链接到={`${match.url}/exampleTopicId`}>
示例主题
</Link>
<路由路径={${match.path}/:topicId`}组件={Topic}/>
</div>
) 

下面是一个直接来自react路由器文档的基本示例

发表评论