使用React和Redux Toolkit实现用户登录功能

目录
  • 一、在utils创建loadable.tsx文件
  • 二、在router文件下创建routes.tsx
  • 三、在index.tsx中配置
  • 四、App.tsx文件配置
    • axios二次封装
    • 请求封装
    • 组件配置

一、在utils创建loadable.tsx文件

这里是tsx文件,不是ts文件,因为ts文件不识别jsx语法

因为loadable是异步加载,返回的是promise,所以需要对返回的promise进行类型限制

import  Loadable  from "react-loadable.tsx";
const withLoadable = (component:()=>Promise<any>)=>{
        return Loadable({
            loader:component,
            loading:()=><div>加载中</div>,
        })
}
export default withLoadable

二、在router文件下创建routes.tsx

这里是tsx文件,不是ts文件,因为ts文件不识别jsx语法

  • 导入RouteObject
  • 导入withLoadable.tsx文件
  • 导入Login组件
    import {RouteObject} from 'react-router-dom'
    import withLoadable from 'withLoadable.tsx文件地址'
    const Login = withLoadable(()=>import('Login.tsx地址'))
    const routes:Array<RouteObject> = [
        {
            path:'/login'
            element:</Login>
        }
    ]

三、在index.tsx中配置

导入Browser

import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import { BrowserRouter } from 'react-router-dom'
const root = ReactDOM.createRoot(
  document.getElementById('root') as HTMLElement
);
root.render(
  <BrowserRouter>
    <App />
  </BrowserRouter>
);

四、App.tsx文件配置

useRoutes是Hook组件

import {useRoutes} from 'react-router-dom'
import routes from 'routes地址'
import React from 'react';
function App() {
  return useRoutes(routes)
}
export default App;

axios二次封装

导入

import axios,{InternalAxiosRequestConfig,AxiosResponse,AxiosError} from 'axios'
import {TOKEN_KEY} from '../utils/contant'
import {getToken,removeToken} from '../utils/h5Stroe'
import {message} from 'antd'
import {REQUESTURLERROR,TOKENVALDATE} from '../utils/contant'

响应拦截器封装:

导入axios的类型声明:AxiosResponse

newAxios.interceptors.response.use((response:AxiosResponse)=>{
    return response
},(error:AxiosError)=>{
    if(error.response){
        switch(error.response.status){
            case 404:
                message.warning(REQUESTURLERROR)
                break;
            case 401:
                message.warning(TOKENVALDATE)
                removeToken(TOKEN_KEY)
                break
        }
    }
})

请求拦截器的封装

导入axios的类型声明:InternalAxiosRequestConfig

// 请求拦截器
newAxios.interceptors.request.use((req:InternalAxiosRequestConfig)=>{
        req.headers.Authorization =  getToken(TOKEN_KEY)
        return req
})

请求封装

创建接口文件对请求参数进行类型限制,下面有user.ts文件

export interface IUser{
    userName:string
    password:Number
}

封装登录请求

import request  from "../../utils/axiosApi";
import {IUser} from '../../types/users'
export default {
    login:(data:IUser)=>request.post('/users/login',data)
}

组件配置

import React from 'react'
import {Form,Button,Card,Input, message} from 'antd'
import { UserOutlined, LockOutlined} from '@ant-design/icons'
import $api from '../api/index'
import {IUser} from '../types/users'
import * as contant from '../utils/contant'
import {setToken} from '../utils/h5Stroe'
import {TOKEN_KEY} from '../utils/contant'
import {useNavigate} from 'react-router-dom'
export default function Login() {
  const nav = useNavigate()
  const loginApi = async(arg:IUser)=>{
      const result = await $api.user.login(arg)
      console.log(result);
        if(result.data.code){
          setToken(TOKEN_KEY,result.data.token)
          message.success(contant.LoginSuccess)
          nav('/')
        }
  }
  return (
    <div>
      <Card style={{width:'500px'}}>
        <Form onFinish={loginApi}>
          <Form.Item label='账号' name='username' rules={[{ required:true, message:contant.USERNOTNULL}]}>
            <Input prefix={<UserOutlined></UserOutlined>} placeholder='请输入用户名'></Input>
          </Form.Item>
          <Form.Item label='密码' name='password' rules={[{ required:true, message:contant.PASSWORDNOTNULL}]}>
            <Input prefix={<LockOutlined></LockOutlined>} placeholder='请输入密码'></Input>
          </Form.Item>
          <Form.Item>
            <Button type='primary' htmlType='submit'>登录</Button>
          </Form.Item>
        </Form>
      </Card>
    </div>
  )
}

到此这篇关于使用React和Redux Toolkit实现用户登录功能的文章就介绍到这了,更多相关React RTK实现登录内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 一文详解ReactNative状态管理redux-toolkit使用

    目录 正文 React 和 Redux-Toolkit 创建 Todo List App 新建一个React应用 创建一个 todoSlice.ts 文件 创建 store 上层组件通过 Provider 分发给组件树 通过useSelector 和 useDispatch 获取数据和分发行为 正文 有同学反馈开发 ReactNative 应用时状态管理不是很明白,接下来几篇文章我们来对比下 React 及 ReactNative 状态管理常用的几种框架的使用和优缺点. 上一篇文章介绍了 red

  • React immer与Redux Toolkit使用教程详解

    目录 1. immer 1.1 setState结合immer使用 1.2 useState结合immer使用 1.3 immer和redux集合 2. Redux Toolkit 1. immer 概述: 它和immutable相似的,实现了操作对象的数据共享,可以优化性能.它实现的原理使用es6的Proxy完成的.小巧,没有像immutable哪样有新数据类型,而是使用js类型. 安装: yarn add immer@9 1.1 setState结合immer使用 简单使用: import

  • React TypeScript 应用中便捷使用Redux Toolkit方法详解

    目录 前言 背景 Redux-Toolkit 常规使用 优化方案 优化 useDispatch 和 useSelector 优化修改 redux 状态的步骤 总结 前言 本文介绍的主要内容是 Redux-Toolkit 在 React + TypeScript 大型应用中的实践,主要解决的问题是使用 createSlice 的前提下消费 redux 状态仍旧有点繁琐的问题. 阅读本文需要的前置知识:了解 React .Redux-Toolkit .TypeScript 的使用. 关于 Redux

  • react使用mobx封装管理用户登录的store示例详解

    1.MobX 介绍 MobX 是一个简单.可伸缩的响应式状态管理库.通过 MobX 你可以用最直观的方式修改状态,其他的一切 MobX 都会为你处理好(如自动更新UI),并且具有非常高的性能.当状态改变时,所有应用到状态的地方都会自动更新. 1.1 React和Mobx关系 React 通过提供机制把应用状态转换为可渲染组件树并对其进行渲染.而MobX提供机制来存储和更新应用状态供 React 使用. 1.2 核心概念 State:驱动应用的数据 Computed values:计算值.如果你想

  • python 3.0 模拟用户登录功能并实现三次错误锁定

    Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年. 像Perl语言一样, Python 源代码同样遵循 GPL(GNU General Public License)协议. Python的3.0版本,常被称为Python 3000,或简称Py3k.相对于Python的早期版本,这是一个较大的升级.为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下兼容. 下面给大

  • 基于Ajax技术实现无刷新用户登录功能

    代码如下: // JScript 文件 function usersLogon() { var userName = document.getElementById("txtuserName").value; var password = document.getElementById("txtpassword").value; var checkCode = document.getElementById("txtCheckCode").val

  • 微信小程序获取手机号授权用户登录功能

    小程序中有很多地方都会用到注册用户信息的地方,用户需要填写手机号等,有了这个组件可以快速获取微信绑定手机号码,无须用户填写. 1.getPhoneNumber这个组件通过button来实现(别的标签无效).将button中的open-type="getPhoneNumber",并且绑定bindgetphonenumber事件获取回调. <span style="font-size:14px;"><button open-type="get

  • Flask框架通过Flask_login实现用户登录功能示例

    本文实例讲述了Flask框架通过Flask_login实现用户登录功能.分享给大家供大家参考,具体如下: 通过Flask_Login实现用户验证登录,并通过login_required装饰器来判断用户登录状态来判断是否允许访问视图函数. 运行环境: python3.5 Flask 0.12.2 Flask_Login 0.4.1 Flask-WTF 0.14.2 PyMySQL 0.8.0 WTForms 2.1 DBUtils 1.2 目录结构: 直接看代码,具体功能有注释 Model/Use

  • VuePress 中如何增加用户登录功能

    VuePress是什么? 先让我们看看 VuePress能干什么?有什么效果? 很像vue官网的文档页面,因为vuePress就是尤大大的一个力作 vuePress官网介绍介绍的很详细,这里只做搭建VuePress项目教程 在 VuePress 中增加用户登录 VuePress 是 Vuejs 官方提供的一个快速建设文档站点的工具,在简单配置好功能后,需要做的事情就剩下写好一个个 Markdown 文档. 因为 VuePress 提供了可以在 Markdown 中使用 Vue 的能力,所以有时候

  • Java CRM系统用户登录功能实现代码实例

    用户登录功能后台代码实现: UserMapper接口查询方法定义 /** * * @param userName * @param userPwd * @param roleName * 查询用户记录 * @return */ User queryUser(@Param("userName")String userName); <!-- 查询用户 --> <select id="queryUser" resultMap="BaseResu

  • springboot+thymeleaf+druid+mybatis 多模块实现用户登录功能

    项目代码:https://github.com/bruceq/supermarket 项目结构: 依赖关系: common:公共层,无依赖 dao:数据层,依赖common service:服务层,依赖dao.common web:应用层,依赖dao.common.service 注:启动类在web层中 父依赖pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http:/

  • Servlet实现简单的用户登录功能实例代码

    1.创建html界面 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="" method="post"> 用户名:<input type=&

  • jQuery+Ajax用户登录功能的实现

    ok,先来贴几张张效果图. 其中大致流程是用户点击页面右上角的登录链接接着弹出div模拟窗口,该窗口通过iframe调用Login.aspx页面,用户输入用户名 密码和验证码后,Login.aspx页面的jQuery代码post到Login.ashx页面处理,Login.ashx页面可以算是简易的aspx页面吧. 当然你用LoginProcess.aspx 也是可以的.Login.ashx页面处理完把结果返回给Login.aspx页面处理,result变量用与接收结果. 如果返回1表示登录成功,

随机推荐