reactjs - 仅匹配 url 中的特定 id
问题描述
我正在尝试设置 PageNotFound。第二条路线应该只匹配 ids ['1', '2', '3']; (这些 id 值是我在 api 调用之后得到的。所以我从 Home 组件内部将值保存在 redux 存储中)。现在,当我尝试访问不正确的 ID 时,它应该重定向到 PageNotFound。如果 url 中的 id 是 4,它应该重定向到 PageNotFound。
当它被重定向时我是否实现了这是用户组件,或者有没有办法在下面的 App.js 文件本身中设置它?
import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
import Home from "./Pages/Home";
import User from "./Pages/User";
import PageNotFound from "./Pages/PageNotFound";
import "./App.css";
function App() {
return (
<div className="App">
<Router>
<Switch>
<Route path="/" exact component={Home} />
<Route path="/user/:id" exact component={User} />
<Route path="*" exact component={PageNotFound} />
</Switch>
</Router>
;
</div>
);
}
export default App;
解决方案
您可以为验证目的创建通用组件。解决方案应该是这样的
<Route path="/user/:id" exact component={MyCheckComponent} />
MyCheckComponent.jsx
const MyCheckComponent =(props) => {
const {id} = useParams()
const allowedIds = useSelector(s => s.user.allowedIds)
return allowedIds.includes(id) ? <User {...props} /> : <Redirect to="/not-found"/>
}
最后,您可以使用路由的渲染道具消除 MyCheckComponent。
推荐阅读
- c# - 创建精灵并设置其颜色的函数
- java - 如何在 android 中使用 Print Document Adapter 打印布局
- html - 视口与 html 正文样式结合使用
- database - 使用 kafka 无法将 neo4j-stream 的节点模式列入白名单
- android - 如何强制停止 Flutter 中的任何应用程序?
- android - Flutter 暂存环境中不提供此 MID
- javascript - 我试图选择一个随机链接来发送我不知道如何让这个随机器发送任何想法?(链接是 Nsfw)
- sql - oracle中如何连接连续的行
- php - PHP中的加权随机选择
- kubernetes - 如何修复 Flannel CNI 插件。错误:[插件法兰绒不支持配置版本“”]