使用React和Redux Toolkit實(shí)現(xiàn)用戶登錄功能
一、在utils創(chuàng)建loadable.tsx文件
這里是tsx文件,不是ts文件,因?yàn)閠s文件不識(shí)別jsx語(yǔ)法
因?yàn)閘oadable是異步加載,返回的是promise,所以需要對(duì)返回的promise進(jìn)行類型限制
import Loadable from "react-loadable.tsx";
const withLoadable = (component:()=>Promise<any>)=>{
return Loadable({
loader:component,
loading:()=><div>加載中</div>,
})
}
export default withLoadable二、在router文件下創(chuàng)建routes.tsx
這里是tsx文件,不是ts文件,因?yàn)閠s文件不識(shí)別jsx語(yǔ)法
- 導(dǎo)入RouteObject
- 導(dǎo)入withLoadable.tsx文件
- 導(dǎo)入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中配置
導(dǎo)入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二次封裝
導(dǎo)入
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'響應(yīng)攔截器封裝:
導(dǎo)入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
}
}
})請(qǐng)求攔截器的封裝
導(dǎo)入axios的類型聲明:InternalAxiosRequestConfig
// 請(qǐng)求攔截器
newAxios.interceptors.request.use((req:InternalAxiosRequestConfig)=>{
req.headers.Authorization = getToken(TOKEN_KEY)
return req
})請(qǐng)求封裝
創(chuàng)建接口文件對(duì)請(qǐng)求參數(shù)進(jìn)行類型限制,下面有user.ts文件
export interface IUser{
userName:string
password:Number
}封裝登錄請(qǐng)求
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='賬號(hào)' name='username' rules={[{ required:true, message:contant.USERNOTNULL}]}>
<Input prefix={<UserOutlined></UserOutlined>} placeholder='請(qǐng)輸入用戶名'></Input>
</Form.Item>
<Form.Item label='密碼' name='password' rules={[{ required:true, message:contant.PASSWORDNOTNULL}]}>
<Input prefix={<LockOutlined></LockOutlined>} placeholder='請(qǐng)輸入密碼'></Input>
</Form.Item>
<Form.Item>
<Button type='primary' htmlType='submit'>登錄</Button>
</Form.Item>
</Form>
</Card>
</div>
)
}到此這篇關(guān)于使用React和Redux Toolkit實(shí)現(xiàn)用戶登錄功能的文章就介紹到這了,更多相關(guān)React RTK實(shí)現(xiàn)登錄內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解React 在服務(wù)端渲染的實(shí)現(xiàn)
這篇文章主要介紹了詳解React 在服務(wù)端渲染的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-11-11
深入理解React Native核心原理(React Native的橋接(Bridge)
這篇文章主要介紹了深入理解React Native核心原理(React Native的橋接(Bridge),本文重點(diǎn)給大家介紹React Native的基礎(chǔ)知識(shí)及實(shí)現(xiàn)原理,需要的朋友可以參考下2021-04-04
ReactRouterV6如何獲取當(dāng)前路由參數(shù)
這篇文章主要介紹了ReactRouterV6如何獲取當(dāng)前路由參數(shù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
React 首頁(yè)加載慢問題性能優(yōu)化案例詳解
這篇文章主要介紹了React 首頁(yè)加載慢問題性能優(yōu)化案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09
淺談react-router HashRouter和BrowserRouter的使用
本篇文章主要介紹了淺談react-router HashRouter和BrowserRouter的使用,具有一定的參考價(jià)值,有興趣的可以了解一下2017-12-12
可定制React自動(dòng)完成搜索組件Turnstone實(shí)現(xiàn)示例
這篇文章主要為大家介紹了可定制React自動(dòng)完成搜索組件Turnstone實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
React?Hooks?實(shí)現(xiàn)的中文輸入組件
這篇文章主要為大家介紹了React?Hooks實(shí)現(xiàn)的中文輸入組件示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
React報(bào)錯(cuò)信息之Expected?an?assignment?or?function?call?and?
這篇文章主要介紹了React報(bào)錯(cuò)之Expected?an?assignment?or?function?call?and?instead?saw?an?expression,下面有兩個(gè)示例來展示錯(cuò)誤是如何產(chǎn)生的,需要的朋友可以參考下2022-08-08

