我目前正在努力使用react router v4嵌套路由
最接近的示例是
React路由器v4文档
我想把我的应用分成两个不同的部分
一个前端和一个管理区
我在想这样的事情:
<;匹配模式=“/”组件={Frontpage}>;
<;匹配模式=“/home”组件={HomePage}/>;
<;Match pattern=“/about”component={AboutPage}/>;
</匹配>;
<;Match pattern=“/admin”component={Backend}>;
<;Match pattern=“/home”组件={Dashboard}/>;
<;Match pattern=“/users”component={UserPage}/>;
</匹配>;
<;未命中组件={NotFoundPage}/>;
前端的布局和样式与管理区域不同。因此,在frontpage中,路线回家,大约一条路线应该是子路线
/home应呈现在Frontpage组件中,/admin/home应呈现在后端组件中
我尝试了一些变化,但我总是不点击/home或/admin/home
编辑-2017年4月19日
因为这篇文章现在有很多观点,我用最终的解决方案更新了它。我希望它能帮助别人
编辑-2017年5月8日
删除旧的解决方案
最终解决方案:
这是我现在使用的最终解决方案。这个示例还有一个全局错误组件,类似于传统的404页面
导入React,{Component}来自“React”;
从“react router dom”导入{交换机、路由、重定向、链接};
const Home=()=>&书信电报;部门>&书信电报;h1>;主页</h1></部门>;;
常量用户=()=>&书信电报;部门>&书信电报;h1>;用户</h1></部门>;;
常量错误=()=>&书信电报;部门>&书信电报;h1>;错误</h1></部门>;
常量前端=道具=>;{
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中不嵌套<;路线/>。而是将它们放入另一个<;组件/>
比如说
<;路由路径='/topics'组件={topics}>;
<;路由路径='/topics/:topicId'组件={Topic}/>;
</路线>;
应该成为
<;路由路径='/topics'组件={topics}/>;
与
常量主题=({match})=>;(
<;div>;
<;h2>;主题<;/h2>;
<;链接到={`${match.url}/exampleTopicId`}>;
示例主题
<;/Link>;
<;路由路径={${match.path}/:topicId`}组件={Topic}/>;
<;/div>;
)
下面是一个直接来自react路由器文档的基本示例