reactjs - 如果 URL 不完全匹配,如何免除某些路由不命中 404 错误?
问题描述
我有一个这样的应用程序布局:
function App() {
return (
<Router>
<Header />
<main className="py-1">
<Route path="/admin" component={Admin} />
<Container>
<Switch>
<Route path="/" component={HomeScreen} exact />
<Route path="/login" component={LoginScreen} exact />
<Route path="/sitemap" component={SiteMap} exact />
{/* SOME MORE ROUTES LIKE THESE .... */}
<Route path="*">
<Error404 />
</Route>
</Switch>
</Container>
</main>
<Footer />
</Router>
);
}
export default App;
我正在设置一个管理页面,出于某种原因,我不想将它放入容器中,例如我想为管理页面设置一个侧边栏,如果我将它放入容器中,那么它会变得难看,不像侧边栏和我不想更改容器的布局,它也适用于其他组件。但是,如果我将 Admin 组件放在容器之外,则<Switch>
认为它不是有效的 URL,并且 Both Admin
+<Error404 />
组件同时加载。
所以我想在这里提出一些逻辑,即路线:
<Route path="*"><Error404 /></Route>
应忽略以 /admin 开头且未包含在<Switch>
标签中且未使用Error404
那可能吗?有没有其他方法可以做到这一点?
解决方案
但是,如果我将 Admin 组件放在容器之外,则
<Switch>
认为它不是有效的 URL,并且 BothAdmin
+<Error404 />
组件同时加载。
这是因为Router
组件包含(即所有匹配)匹配并呈现路由,而Switch
独占(即只有一个匹配)匹配并呈现它们。由于 the"/admin"
Route
和Switch
都由 the 渲染,因此Router
它们都可能匹配。
您可以在路由器中使用多个Switch
。渲染“外部”开关以匹配和渲染“/admin”路由或其他所有内容,并按原样使用“内部”开关。现在 404 路由在内部交换机中的“其他”路由上呈现。
function App() {
return (
<Router>
<Header />
<main className="py-1">
<Switch>
<Route path="/admin" component={Admin} />
<Route>
<Container>
<Switch>
<Route path="/" component={HomeScreen} exact />
<Route path="/login" component={LoginScreen} exact />
<Route path="/sitemap" component={SiteMap} exact />
{/* SOME MORE ROUTES LIKE THESE .... */}
<Route path="*">
<Error404 />
</Route>
</Switch>
</Container>
</Route>
</Switch>
</main>
<Footer />
</Router>
);
}
推荐阅读
- scala - 使用随机双精度添加列时,Spark Dataframe 在所有行中都有重复值
- java - 将 Guardian 文件上传到 Tandem/Compaq/HPE NonStop 服务器
- c++ - 标准库版本的剪辑功能
- java - Spring-boot rest api当前请求不是邮递员的多部分请求
- r - 从 R 中的双义关系数据框中导出第三方亲属关系
- mysql - MySQL - 即使连接为空也检索结果
- msbuild - 如何在 vNext TFS 构建中将首选项调试设置为在发布之前首先运行?
- javascript - 如何使用 .filter() 访问 JSON 密钥
- amazon-web-services - 如何将某些国家的用户的流量引导到正确的服务器?
- node.js - 授权空端点 Bot Azure