我在一个项目中工作,我需要将浏览器路由器一分为二,一个用于公共(public)用户,另一个用于管理员,这是我的想法:
<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
和 ...
https://stackoverflow.com/questions/63273849/
相关文章:
python - Pandas 在 Linux 中失败,在 Windows 中没有发生 - 缺少数据
azure - 如何在函数应用中为Azure SignalR服务使用不同的连接字符串?
text - 关注 VStack 中的下一个 TextField
postgresql - Postgres JSONB 检索非常慢
reactjs - EsLint 错误解释 no-unused-vars 中的导入语句
perl - 为什么 local 在 STDERR 和 STDOUT 上不起作用?
postgresql - 使用 Aurora postgres serverless 在 AWS R