axios笔记

axios笔记

这是我在学习axios时做的一些笔记,可以参考

axios是在前后端对接时,用来处理网络请求什么时用的

一.axios官网

这一部分内容主要参考axios官网教程内容

起步 | Axios 中文文档 | Axios 中文网 (axios-http.cn)

1.简介

axios是一个基于promise的网络请求库,可以用于浏览器和node.js

promise用于处理一些需要花费长时间的任务,进行异步处理,防止任务阻塞。一般是说解决了回调地狱的问题。

Node.js是一个服务器端的、非阻断式I/O的、事件驱动的JavaScript运行环境,能够使得javascript脱离浏览器运行。

在这里插入图片描述

XMLHttpRequest(XHR)对象用于与服务器交互。通过 XMLHttpRequest 可以在不刷新页面的情况下请求特定 URL,获取数据。这允许网页在不影响用户操作的情况下,更新页面的局部内容。XMLHttpRequestAJAX 编程中被大量使用。

2.用例

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
差不多只能看懂这么些 qwq
后来又去b站找了个视频看

二.react+axios

以下内容参考b站视频

1.前言

在进行开发时,我们往往需要发送网络请求,和服务器进行交互,与后端对接,来实现功能更强大的产品

在前端中有几种网络请求的选择:

1.传统的Ajax,是基于XHP的

但是用起来体验并不好,一般是使用jQuery-Ajax

2.jQuery-Ajax

用起来好一点,但会有点麻烦

3.Fetch API

Fetch是AJAX替换方案,基于Promise设计

可能也会有一定的缺点

4.axios

是前端使用非常广泛的网络请求库,Vue作者也推荐在vue中使用axios

在浏览器发送XMLHttpRequests请求、在Node.js中发送http请求、支持Promise API、拦截请求和响应、转换请求和相应数据等等

2.基本使用

http://httpbin.org/ 可以用这个网站来测试网络请求

一般用的最多的网络请求是get和post请求


在这里插入一个react小知识点,一般index文件作为初始页面,可以引入外部组件

具体引入方法是:

//index.jsx
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';

const root = ReactDOM.createRoot(document.getElementById("root"));
  root.render(<App />);
//App.jsx
export default class App extends PureComponent{
    ......
    render(){
        return(......)
    }
}

这样就引入并渲染了外部的App组件


2.1用axios发送get和post请求
     componentDidMount(){
        //一般是在这里面发送网络请求,获取数据修改进state里面,然后再在render里面调用
        // this.setState({
        //     products: [...this.state.products,...res],
        // })


        //axios发送基本网络请求get请求
        axios({
            url:'http://httpbin.org/get',    //网络请求地址
            params:{                    //自动拼接到url的后面
                name: 'why',
                age: 18,
            }                      //默认是get请求//最终返回Promise
        }).then(res=>{              //请求成功会进then里面
            console.log(res);
        }).catch(err=>{              //拒绝会进这里
            console.error(err);
        });     
        
        //axios 发送post请求
        axios({
            url:'http://httpbin.org/post',
            data:{
                name : 'wzss',
                age: 19,
            },
            method: 'post'
        }).then(res=>{
            console.log(res);
        }).catch(err=>{
            console.error(err);
        })

//也可以这么写get请求
        axios.get('http://httpbin.org/get',{
            params:{
                name: 'zzyy',
                age: 3,
            }
        }).then(console.log);        //可以直接写console.log  //一般不这么写,因为要处理数据

//也可以这么写post请求
        axios.post('http://httpbin.org/post',{
            name: 'jack',
            age: 25,
        }).then(console.log);
    }

用到了React生命周期的相关知识

生命周期函数 componentDidMount() , 即在组件加载完成,render() 之后调用,这个方法只会触发一次

可以在这个函数内进行网络请求等等,对数据进行处理,修改入state等等操作

不同需求可以查找使用不同的生命周期函数

效果:
在这里插入图片描述

2.2使用await async关键字
async componentDidMount(){
	try{
        const result=await axios.get('http://httpbin.org/get',{
            params:{
                name: 'zzyy',
                age: 3,
            }
        });
        console.log(result);
    }catch(err){
        console.log(err);
    }
}

这样也能进行get和post请求

2.3处理多个请求

用axios.all()可以同时处理多个请求

    const request1=axios({
        url: 'http://httpbin.org/get',
        params: {
            name: 'why',
            age: 18,
        }
    })
    const request2=axios({
        url:'http://httpbin.org/post',
        data:{
            name: 'wzss',
            age: 19,
        },
        method: 'post',
    })

        //将多个请求合并
    axios.all([request1,request2]).then(res=>{
        console.log(res);
    }).catch(err=>{
        console.log(err);
    })

//或者这么写
        //将多个请求合并
    axios.all([request1,request2]).then(([res1,res2])=>{
        console.log(res1,res2);
    }).catch(err=>{
        console.log(err);
    })

在这里插入图片描述

3.axios的配置信息

有很多的配置选项

可以去官网查找等等

网络请求成功后的返回数据,一般是用res.data进行获取

axios的默认配置

可以写默认的配置,提高代码复用

//默认配置 在index.jsx中写
axios.defaults.baseURL="http://httpbin.org";
axios.defaults.timeout=5000;
axios.defaults.headers.common['token']='dafdaafdafdaf';
axios.defaults.headers.post['Content-Type']='application/text';
4.创建新的实例

const instance1=axios.creat({…})

const instance2=axios.creat({…})

可以响应多个服务器

5.axios拦截器

进行请求拦截或者响应拦截

        axios.interceptors.request.use(config=>{   //请求拦截成功进入这个
            //1.发送网络请求时,在页面中间显示loading的组件
            //2.某一些请求,要求用户必须携带token,如果没有携带,那么直接跳转到登陆页面
            //3.params/data需要序列化操作
            
            return config;        //配置信息
        },err=>{
                //很少进入这个
        }
        );
        //响应拦截
        axios.interceptors.response.use(res=>{

            return res.data;
        },err=>{
            if(err&&err.response){
                switch(err.response.status){
                    case 400:
                        console.log('请求错误');break;
                    case 401:
                        console.log('未授权访问');break;
                    default:
                        console.log('其他错误');
                }
            }
            return err;
        });

        axios.get('http://httpbin.org/get',{
            params:{
                name: 'wzss',
                age: 19,
            }
        }).then(res=>{
            console.log(res);
        }).catch(err=>{
            console.log(err);
        })
    }

6.在真实开发中的处理

进行二次封装,减少项目对axios的依赖性,好处是假如axios出现问题,便于修改

新建request.js

import axios from 'axios';
import { BASE_URL, TIMEOUT } from './config';


//工具文件  进行封装
const instance = axios.create({
    baseURL: BASE_URL,
    timeout: TIMEOUT,
})

//添加拦截器
instance.interceptors.response.use(res => {

    return res.data;
}, err => {
    if (err && err.response) {
        switch (err.response.status) {
            case 400:
                console.log('请求错误');
                break;
            case 401:
                console.log('未授权访问');
                break;
            default:
                console.log('其他错误');
        }
    }
    return err;
});

export default instance;

新建config.js进行相关的配置

//相关的配置信息

const devBaseUrl = 'http....';
const proBaseUrl = 'http....';
export const BASE_URL = process.env.NODE_ENV === 'development' ? devBaseUrl : proBaseUrl;
export const TIMEOUT = 5000;

在app.jsx里

import requset from './service/request';

        requset.get('http://httpbin.org/get',{
            params:{
                name: 'wzss',
                age: 19,
            }
        }).then(res=>{
            console.log(res);
        }).catch(err=>{
            console.log(err);
        })

这样就可以了

三.总结

之前没学过axios,这两天大致学了一下基本操作,有了一定理解,但是对于服务器、网络请求什么的还是一知半解,如何将前端和后端联系起来还是不太明白,可能还要把数据库、服务器什么的学完,才能有一个整体的理解吧,暑假估计是没太多时间仔细学了,等大二再仔细学一学mysql什么的吧

路漫漫其修远兮,加油加油!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值