reactjs - 我需要将浏览器路由器一分为二
问题描述
我正在一个项目中工作,我需要将浏览器路由器一分为二,一个用于公共用户,另一个用于管理员,这是我的想法:
<BrowserRouter>
<Layout>
<Route exact path="/" component="{Home}">
<Switch>
<Route exact path="/cart" component="{Cart}" />
<Route exact path="/product/:productId" component="{ProductPage}" />
<Route component="{NotFound}" />
</Switch>
</Route>
</Layout>
<AdminLayout>
<Route exact path="/admin" component="{AdminHome}">
<Switch>
<Route exact path="/products" component="{AdminProductsList}" />
<Route
exact
path="/product/:productId"
component="{AdminEditProduct}"
/>
<Route component="{NotFound}" />
</Switch>
</Route>
</AdminLayout>
</BrowserRouter>
它显然不能这样工作,但我想知道哪种方法是完成这项工作的最佳方法
更新
现在我一直在努力,我做到了
<BrowserRouter>
<Switch>
<Layout>
<Route path="/">
<Switch>
<Route exact path="/" component="{Home}" />
<Route exact path="/cart" component="{Cart}" />
<Route exact path="/product/:productId" component="{ProductPage}" />
<Route component="{NotFound}" />
</Switch>
</Route>
</Layout>
<AdminLayout>
<Route path="/admin">
<Switch>
<Route exact path="/" component="{AdminHome}" />
<Route exact path="/products" component="{AdminProductsList}" />
<Route
exact
path="/product/:productId"
component="{AdminEditProduct}"
/>
<Route component="{NotFound}" />
</Switch>
</Route>
</AdminLayout>
</Switch>
</BrowserRouter>
public("/") 路由工作得很好,但是 admin("/admin") 给我一个 404
解决方案
admin
您可以为两个规则(和)拥有两个数组对象user
,然后您可以将其映射到Route
组件,例如:
adminRoutes = [{path: '/admin', component: AdminHome, ...}]
nomralUserRoutes = [{path: '/', component: UserHome, isExact: true, ...}]
routes = isAdmin ? adminRoutes : nomralUserRoutes
render(){
return (
<BrowserRouter>
<Switch>
routes.map(route => (<Route exact path={route.path} component={route.component} ... />))
</Switch>
</BrowserRouter>)
}
它只是一个示例,您可以使路由对象更复杂以支持更多功能Auth
,例如...
推荐阅读
- python - 如何从列表中查找数据框中的子字符串以创建新列?
- scikit-image - 如何在 Frangi 过滤器中为 DICOM 数据的 3D 堆栈设置间距
- jenkins - Jenkins 管道 - sh - git push 随机失败 - 错误:脚本返回退出代码 128
- html - 如何让 CodeMirror 适合垂直弹性盒的剩余空间
- ios - 填充矩形而不干扰 HStack 的几何形状
- solr - SOLR:如何忽略 MinFieldValueUpdateProcessorFactory 处理器中的 0(零)值?
- python - 从列表中创建数据框中的列(列数更改)
- node.js - 使用 JavaScript 框架和 Node.js 进行身份验证
- c# - 在 HoloLens 2 上访问 MediaFrameSourceGroup 参数的问题
- angular - 检查后表达式已更改。以前的值:''。当前值:“测试”