学习react-登录状态验证

1.创建三个页面LoginPage, HomePage,NotFoundPage用于Router

创建LoginPage.tsx用于做登录页面

// LoginPage.tsx
const LoginPage = (props:LoginProp) => {const navigate = useNavigate();return( <h1 onClick={ ()=>{navigate("/");}}>Hello Login, {props.name}!</h1>)}export default LoginPage;//LoginMeta.tsxexport interface LoginProp extends MetaProp{}export interface LoginState extends MetaState{}

 创建HomePage.tsx,作为主页面,登录完成后,会跳转到这个页面

// HomePage.tsx
const HomePage = (props: HomeProp)=> {const { name } = props; //解构赋值return (<div><h1>Hello, {name}!</h1></div>);}export default HomePage;  

创建NotFoundPage.tsx ,作为其他路径页面,url是其他页面时,跳到这

// NotFoundPage.tsx
class NotFoundPage extends Component<MetaProp, MetaState> {constructor(props: LoginProp) {super(props);this.state = { count: 0 };}render() {return <h1>Hello, NotFound {this.props.name}!</h1>;}}export default NotFoundPage;

2.使用Context传递登录上下文 

学习react-Provider解决props需要层层传递问题icon-default.png?t=N7T8https://blog.csdn.net/jacklam200/article/details/140534994

在前面文章的基础上,给Global类添加用户信息用于判断是否登录

// Global.tsx
export class Global {constructor() {}type = "";count = 0;name = 'react';loading = true;userName = "";userToken = "";
}const globalStore = new Global();
export {globalStore};

3.定义AuthRouter用于判断登录

创建AuthRouter.tsx,利用之前讲到context,管理Global里的userToken数据

// AuthRouter.tsx
const AuthRouter = ({ children, redirectTo }) => {const theme = useTheme();// useEffect(//   () => setUrlUser(username)// )return theme?.global?.userToken != null &&  theme?.global?.userToken != undefined && theme?.global?.userToken != "" ? children: <Navigate to={redirectTo} />;
}
export default AuthRouter;

4.配置Router

用AuthRouter配置需要登录页面,在这里我们只配置HomePage需要登录

// App.tsx
function App() {//const element = useRoutes(routes);return (<div className="App"><Routes><Route path="/" element={<AuthRouter redirectTo="/login"><HomePage name='test' /></AuthRouter>}/><Route path="login" element={<LoginPage name='login'/>} /><Route path="*" element={<NotFoundPage name='not found'/>} /></Routes> </div>);
}export default App;

5.测试页面

在登录页面,创建点击模拟登录

// LoginPage.tsx
const LoginPage = (props:LoginProp) => {const navigate = useNavigate();const theme = useTheme()return( <h1 onClick={ ()=>{setToken("1234")theme?.setGlobal({...theme?.global, "userToken":"1234"})navigate("/");}}>Hello Login, {props.name}!</h1>)}export default LoginPage;

 这样只要没登录情况下,到HomePage页面,都会跳到LoginPage,直到登录,才真正到HomePage页面

另外需要持久化,可以用localStorage

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/51503.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

昇思25天学习打卡营第1天 | 快速入门教程

昇思大模型平台&#xff0c;就像是AI学习者和开发者的超级基地&#xff0c;这里不仅提供丰富的项目、模型和大模型体验&#xff0c;还有一大堆经典数据集任你挑。 AI学习有时候就像找不到高质量数据集的捉迷藏游戏&#xff0c;而且本地跑大数据集训练模型简直是个折磨&#xf…

JQuery简单实现ul li点击菜单项被选中的菜单项保持高亮状态(导航ul li点击切换样式)

效果&#xff1a; JS&#xff1a; $(function () {//遍历list&#xff08;一般为ul li&#xff09;$("#menu a").each(function () {//给当前项添加点击事件&#xff08;点击后切换样式&#xff09;$(this).bind(click,function () {// 移除其他所有项的active类$(&…

if [ $? -ne 0 ]; then

$?是shell变量,表示"最后一次执行命令"的退出状态.0为成功,非0为失败. -ne 表示 不等于 ./test.sh if [ $? -ne 0 ]; then 就是 如果 test.sh 退出状态 不等于0 &#xff08;即中间有报错&#xff09;

Unity Rigidbody组件实现动画:物理驱动的角色动作

在Unity中&#xff0c;Rigidbody组件是物理引擎的核心&#xff0c;它为游戏对象&#xff08;GameObject&#xff09;添加了质量、阻力和碰撞响应等物理属性。通过Rigidbody&#xff0c;开发者可以创建受物理定律影响的动画效果&#xff0c;使角色动作更加逼真和自然。本文将探讨…

解决运行pip install时提示错误:error: externally-managed-environment

新版ubuntu使用pip时发生错误&#xff1a; error: externally-managed-environment This environment is externally managed ╰─> To install Python packages system-wide, try apt install python3-xyz, where xyz is the package you are trying to instal…

挑战房市预测领头羊:KNN vs. 决策树 vs. 线性回归

挑战房市预测领头羊&#xff08;KNN&#xff0c;决策树&#xff0c;线性回归&#xff09; 1. 介绍1.1 K最近邻&#xff08;KNN&#xff09;&#xff1a;与邻居的友谊1.1.1 KNN的基础1.1.2 KNN的运作机制1.1.3 KNN的优缺点 1.2 决策树&#xff1a;解码房价的逻辑树1.2.1 决策树的…

算法(查找算法---二分查找/索引查找/哈希表查找)

二、查找算法 什么是查找算法&#xff1a; 在一个数据序列中&#xff0c;查找某个数据是否存在或存在的位置&#xff0c;在实际开发过程中使用的频率非常高&#xff0c;例如对数据常见的操作有增、删、改、查&#xff0c;增加数据时需要查询新增加的数据是否重复&#xff0c;…

【日常设计案例分享】通道对账

今天跟同事们讨论一个通道对账需求的技术设计。鉴于公司业务线有好几个&#xff0c;为避免不久的将来各业务线都重复竖烟囱&#xff0c;因此&#xff0c;我们打算将通道对账做成系统通用服务&#xff0c;以降低各业务线的开发成本。 以下文稿&#xff08;草图&#xff09;&…

驾驭Mojo模型:处理大规模数据集的艺术

驾驭Mojo模型&#xff1a;处理大规模数据集的艺术 引言 在现代的数据分析和机器学习领域&#xff0c;处理大规模数据集是一个常见且具有挑战性的任务。Mojo&#xff08;Model-as-a-Service&#xff09;模型&#xff0c;作为一种提供模型服务化的工具&#xff0c;允许开发者和…

vue中,当数据更之后,视图没有对应的更新

异步更新队列&#xff1a;Vue.js中对数据的更改是异步的&#xff0c;当你修改数据时&#xff0c;Vue并不会立即更新DOM&#xff0c;而是将更改放入一个队列中&#xff0c;然后在下一个事件循环中才会更新视图。这是为了优化性能。如果在同一个事件循环中进行多次数据修改&#…

局部变量,在使用时再定义

关于局部变量&#xff0c;适时定义局部变量&#xff0c;可提高代码清晰度和可读性&#xff0c;并能规避不必要的代码bug 局部变量&#xff0c;在使用时再定义&#xff0c;提高代码可读性 下面代码中的2个方法&#xff0c;第1个 verifyTaskApply 调用第2个 existAppliedTask 。…

20240730 每日AI必读资讯

&#x1f3ac;燃爆&#xff01;奥运8分钟AI影片火了&#xff0c;巴赫主席&#xff1a;感谢中国黑科技 - 短片名为《永不失色的她》&#xff08;To the Greatness of HER&#xff09;&#xff0c;由阿里巴巴和国际奥委会联合推出。 - 百年奥运史上伟大女性的影响故事在此被浓缩…

Rust语言入门第七篇-控制流

文章目录 Rust语言入门第七篇-控制流If 表达式基本结构特点和规则示例 let 语句中使用 ifloop 循环基本结构特点示例综合示例 while 循环基本结构特点示例综合示例 与 loop 循环的区别 for 循环基本结构详细说明特点示例综合示例 Rust语言入门第七篇-控制流 Rust 的控制流是指…

Oracle Database 23.5 - for Engineered Systems版本发布

要尝鲜的可以在https://edelivery.oracle.com/下载。对于x86的本地版本再等等吧。 安装可参考飞总的&#xff1a;oracle 23ai&#xff08;23.5.0.24.07&#xff09;完整功能版安装体验 – 提供7*24专业数据库(Oracle,SQL Server,MySQL,PostgreSQL等)恢复和技术支持Tel:1781323…

Python数值计算(12)

本篇说说Neville方法。Neville方法的基础是&#xff0c;插值多项式可以递归的生成&#xff0c;有时进行插值的目的是为了计算某个点的值&#xff0c;这个时候并不需要将拟合曲线完全求出&#xff0c;而是可以通过递归的方式进行计算&#xff0c;具体操作如下&#xff1a; 例如…

OpenGL学习 1

一些唠叨&#xff1a; 很多时候&#xff0c;都被Live2d吸引&#xff0c;去年想给网页加个live2d看板娘&#xff0c;结果看不懂live2d官方给的SDK&#xff0c;放弃了。今天又想弄个live2d桌宠&#xff0c;都已经在网上找到Python 的 Live2D 拓展库了&#xff0c;并提供了用QT实现…

可能是目前最全面的前端提测/自测标准

产品、测试总是抱怨你的开发质量太差&#xff0c;怎么办&#xff1f; 前端开发的质量直接影响用户体验。无论是一个简单的静态页面&#xff0c;还是复杂的动态应用&#xff0c;都需要经过严格的测试流程才能保证上线后的稳定和流畅。 这里整理了一份前端自测标准&#xff0c;…

【算法模板】数论:裴蜀定理

概念 裴蜀定理&#xff08;Bzout’s Identity&#xff09;是数论中的一个重要定理&#xff0c;涉及整数的线性组合。定理陈述如下&#xff1a; 对于任何整数 a 和 b&#xff0c;如果 d 是 a 和 b 的最大公约数&#xff0c;那么存在整数 x 和 y 使得&#xff1a; axbyd 换句话…

昇思25天学习打卡营第19天|ResNet50 图像分类案例:数据集、训练与预测可视化

目录 环境配置 数据集加载 数据集可视化 Building Block Bottleneck 构建ResNet50网络 模型训练与评估 可视化模型预测 环境配置 首先指出实验环境预装的 mindspore 版本以及更换版本的方法。然后&#xff0c;它卸载了已安装的 mindspore 并重新安装指定的 2.3.0rc1 版本…

值得买科技与MiniMax达成官方合作伙伴关系,共建融合生态

7月29日&#xff0c;值得买科技与大模型公司MiniMax宣布达成官方合作伙伴关系。 MiniMax旗下大模型产品海螺AI现已接入值得买“消费大模型增强工具集”&#xff0c;基于海螺AI比价策略&#xff0c;用户可通过海螺AI“悬浮球”功能实现快速比价及跳转购买。 此次合作也标志着值…