使用React和Redux Toolkit實現(xiàn)用戶登錄功能
一、在utils創(chuàng)建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文件下創(chuàng)建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 })
請求封裝
創(chuàng)建接口文件對請求參數(shù)進行類型限制,下面有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> ) }
到此這篇關(guān)于使用React和Redux Toolkit實現(xiàn)用戶登錄功能的文章就介紹到這了,更多相關(guān)React RTK實現(xiàn)登錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
react-router?v6實現(xiàn)動態(tài)路由實例
這篇文章主要為大家介紹了react-router?v6實現(xiàn)動態(tài)路由實例詳解,<BR>有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08react echarts tooltip 區(qū)域新加輸入框編輯保存數(shù)據(jù)功能
這篇文章主要介紹了react echarts tooltip 區(qū)域新加輸入框編輯保存數(shù)據(jù)功能,大概思路是用一個div包裹echarts, 然后在echarts的同級新建一個div用來用來模擬真實tooltip,通過鼠標移入移出事件控制真實tooltip的顯示與隱藏,需要的朋友可以參考下2023-05-05