reactjs - 反应路由器默认路由不适用于嵌套结构
问题描述
我有以下代码:
layOut.js
...
<Switch>
<Route path="/app" component={AppLayout} />
</Switch>
...
appLayout.js
...
<Route path="/app/user/change-password" exact component={ChangePassword} />
<Can role="ADMIN">
<Route path="/app/user/billing" exact component={Billing} />
</Can>
<Route component={NotFound} />
...
我期望NotFound
当路由与提到的路由不匹配时显示组件(例如/app/awd
),但相反,NotFound
组件正在所有页面中呈现。
解决方案
我假设Can
组件输入appLayout.js
是您protected
自己创建的组件。
根据我的经验,拥有多个专用parent
path
(例如:/app
或/app2
)并认为其中每一个都path
需要自己的Not Found
路径实际上是行不通的,它总是会呈现Not Found
组件/页面。
因此,为了完成这项工作,您只需将您Not Found
route
的layOut.js
. 基本上Switch
发生在哪里。就一次。
layOut.js
:-
export default function Layout() {
return (
<Router>
<Switch>
<AppLayout />
<Route path="*" component={() => "Not Found"} />
</Switch>
</Router>
);
}
appLayout.js
:-
const AppLayout = () => {
return (
<>
<Route
exact
path="/app/user/change-password"
component={ChangePassword}
/>
<Can role="ADMIN">
<Route exact path="/app/user/billing" component={Billing} />
</Can>
</>
);
};
export default AppLayout;
推荐阅读
- asp.net-core - 从 Windows 身份验证迁移到登录页面
- php - 如何通过 docusign 创建信封 API 更新“未命名”字段?
- objective-c - 在 drawRect NSView (macOS & ObjC) 上绘制图像(作为覆盖)
- c# - 为了避免空值,如何制定一种更好的逻辑来将 api 结果传递给我的项目中的对象
- node.js - 如何在 Node.js 后端使用 Passport.js 实现刷新令牌流?
- quasar-framework - Quasar中的QLayout
- php - 如何在虚拟主机中使用更具体的标头覆盖 Apache 配置中设置的标头
- c# - EF Core 5“在‘包含’操作中无效,因为它不代表属性访问”
- java - Spring bean原型范围比GC中的另一个Singelton bean
- javascript - Webpack / ts-loader - 编译到 es5 不工作