当前位置: 首页 > news >正文

React实现登录授权功能

一、概述

        本文将通过React Router & React Redux & Umi.js useModel 实现登录和授权路由功能。

        Redux实现用户认证状态流转,目前只简单实现登录和登出两个功能。

        useModel实现全局数据状态管理。

        React Router实现路由动态管理。

二、技术实现

authState.js(redux配置)

export const Login = (username, password) => ({type: 'login',username: username,password: password };
export const Logout = (username) => ({type: 'logout', username: username});export const AuthReducer = (state, action) =>{switch(action.type){case 'Login':const res = auth(action.username, action.password);if (res){return {...state, loggined:true, username}}return state;case 'Logout':const res = unauth(action.username);if (res){return {...state, loggined:false}}return state;}
}export const AuthInitialState = {loggined: false};

authModel.ts

const [state, dispatch] = useReducer(AuthReducer,AuthInitialState);exprot default function AuthModel(){return {state,dispatch}
}

auth-page.js (登录页)

export const AuthPage = () =>{const [state, dispatch] = useModel("userModel");return (<div><h1>Login Page</h1><button onClick = () => dispatch(Login())>Login</button></div>);};

welcome-page.js (首页)

 const Welcome = () =>{const [state, dispatch] = useModel("userModel")return (<div><h1>Home Page</h1>{state.loggined?<button onClick =()=> {dispatch(Logout())}>LogOut</button>:'请登录'}</div>);
}

app.js (入口,配置路由)

const App = () => {const [state] = userModel("userModel");return (<ul><li><Link to = '/'>Home</Link></li><li><Link to = 'login'>Login</Link></li><ul><Router><Switch><Route exact path = '/' render= {() => {state.isLoggined ? <WelcomePage/>: <Redirect to = '/login'/>}} /><Route exact path = '/login' render = {() => {state.isLoggined ? <Redirect to = '/'/>:<AuthPage/> }/></Switch></Router>);}

相关文章:

  • 专业爬虫框架 -- scrapy初识及基本应用
  • 精通Git(第2版)读书笔记
  • Linux(CentOS7.5):通过docker安装redis
  • Golang WebSocket 心跳
  • WPF 简单绘制矩形
  • 10、SQL注入——数据库基础
  • 【2023.12.4练习】数据库知识点复习测试
  • dp-矩阵连乘
  • 前后端参数传递总结
  • 毕业项目分享
  • 纯C读取文件实现解析H264裸流每一帧数据
  • 系列十三、SpringBoot的自动配置原理分析
  • 【工具使用-Audition】如何使用Audition频谱分析
  • 鸿蒙(HarmonyOS)应用开发——管理组件状态
  • [ISCTF 2023]——Web、Misc较全详细Writeup、Re、Crypto部分Writeup
  • 【面试系列】之二:关于js原型
  • 11111111
  • Apache Pulsar 2.1 重磅发布
  • es6(二):字符串的扩展
  • JWT究竟是什么呢?
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • OSS Web直传 (文件图片)
  • web标准化(下)
  • 分布式任务队列Celery
  • 汉诺塔算法
  • 记一次删除Git记录中的大文件的过程
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 面试总结JavaScript篇
  • 前端js -- this指向总结。
  • 如何在GitHub上创建个人博客
  • 通信类
  • 学习ES6 变量的解构赋值
  • 一个项目push到多个远程Git仓库
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • # 透过事物看本质的能力怎么培养?
  • (AngularJS)Angular 控制器之间通信初探
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • .NET 依赖注入和配置系统
  • .Net(C#)自定义WinForm控件之小结篇
  • .Net6 Api Swagger配置
  • :如何用SQL脚本保存存储过程返回的结果集
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解
  • [ACM] hdu 1201 18岁生日
  • [Asp.net MVC]Asp.net MVC5系列——Razor语法
  • [BT]BUUCTF刷题第9天(3.27)
  • [BZOJ1008][HNOI2008]越狱
  • [C]编译和预处理详解
  • [C++]C++基础知识概述
  • [CISCN2019 华东南赛区]Web11
  • [emuch.net]MatrixComputations(7-12)