美文网首页
react+ts+axios进行数据请求

react+ts+axios进行数据请求

作者: 东方三篇 | 来源:发表于2021-08-16 15:14 被阅读0次

1. 安装 axios

2. 在官方axios的基础上进行二次封装

  • 在 src 目录下创建 api 文件夹,用来存放对应接口的内容

  • 在 src/api 下新增 index.tsx 文件,用来管理 接口

  • 在 src/api 下新增 ajax.tsx 文件, 用来做ajax请求的统一请求拦截, 响应拦截,响应统一处理等工作

    // ajax.tsx 文件
    import axios form 'axios'
    
    // 可以在这里做一下请求拦截,设置公共请求头等
    
    export default function ajax(url:string, data:IParams = {}, type:string = 'POST') {
        
        // 判断 url 地址, 在多个后台地址时候使用, 可以在这里拦截使用不同的请求头,传入不同token等操作
        
        return new Promise((resolve, reject) => {
            let promise:any // 返回一个 promise 对象
            if (type === 'GET') {
                promise = axios.get(url, { params : data })
                
                // 多个后台地址时候,传入不同的token值
                promise = axios.get(url, { params : data, headers: {access_totken: sessionStorage.getItem('token_other')} })
            } else if (type === 'POST') {
                promise = axios.post(url, data)
                
                // 多个后台地址时候,传入不同的token值
                promise = axios.get(url, data, headers: {access_totken: sessionStorage.getItem('token_other')})
            }
            // 统一处理 response
            promise.then((response:any) => {
               (response && response.data) ? resolve(response.data) : reject(response)
            }).catch((error:any) => {
              console.log(error)
            })
        })
    }
    
    // index.tsx 文件
    import ajax from './ajax'
    /*
    * ajax 从 ajax.js 引入 需要
    * 第一个 参数 是 url 必填
    * 第二个 参数 是 params对象 默认 {} 非必填
    * 第三个 参数 是 GET、POST 请求方式, 默认 POST, 非必填
    */
    // 后台地址
    const BASE_URL:string = `http:xxxx/api`
    const BASE_URL_OTHER:string = `http:xxx2.api` // 多个后台地址
    
    // 登陆接口
    export const ReqLogin = (params:IParams) => ajax(`${BASE_URL}login`, params, 'POST') // POST 是默认值,可以不写
    
    export const ReqOther = (params:IParams) => ajax(`${BASE_URL_OTHER}login`, params)
    

3. 使用 axios 请求数据

// login 登陆组件中调用 登陆接口
// 引入接口
import { ReqLogin } from '@api'
// 触发请求事件
const loginSubmit = async () => {
    const params = {name: 'admin', password: '123456'}
    const res = await ReqLogin(params)
    // res 即为 ajax 请求返回的 数据
}

相关文章

网友评论

      本文标题:react+ts+axios进行数据请求

      本文链接:https://www.haomeiwen.com/subject/tlzkbltx.html