vue3学习笔记简单封装axios示例实现

yizhihongxing

欢迎来到本文的完整攻略——《Vue3学习笔记:简单封装Axios示例实现》。

简介

在使用Vue.js开发Web应用的过程中,常常需要与后端交互数据。Vue.js提供了一个轻量级、高效的基于Promise的异步HTTP请求库——Axios。Axios能够发送GET、POST等各种类型的请求,并拥有诸多高级特性(如拦截器、并发请求、取消请求等),是Vue.js的非常好的补充。

本文将从以下几个方面详细讲解如何使用Axios进行HTTP请求,并介绍如何使用Vue3对Axios进行简单的封装:

  • 安装Axios
  • 发送HTTP请求
  • 使用Axios拦截器
  • Vue3封装Axios

安装Axios

在使用Axios之前,我们需要先安装它。通过npm安装Axios的命令如下:

npm install axios --save

发送HTTP请求

在使用Axios发送HTTP请求之前,我们需要先明确要发送的请求的参数,如请求的URL、请求的数据、请求的方法(GET、POST等)。下面是使用Axios发送请求的基本语法:

// 参数为URL和请求参数的对象
axios({
  method: 'POST', // 请求方法
  url: '/user', // 请求URL
  data: { // 请求参数
    firstName: 'John',
    lastName: 'Doe'
  }
})

如果仅仅是发送GET请求,可以将参数拆分开来写,如下所示:

axios.get('/user', {
  params: {
    firstName: 'John',
    lastName: 'Doe'
  }
})

这样就可以简单地发送一个GET请求了。如果需要发送其他类型的请求,可以将axios.get()替换为axios.post()axios.put()axios.delete()等方法即可。

使用Axios拦截器

Axios拦截器提供了一个非常有用的特性,可以在请求发送前(或响应返回后)对请求(或响应)进行一些预处理。这个特性可以用来进行全局异常处理、添加token、统计请求耗时等。

Axios拦截器有两种,分别是请求拦截器和响应拦截器,分别对应着请求和响应。下面是请求拦截器的代码示例:

axios.interceptors.request.use(function (config) {
  // 在发送请求之前添加token
  config.headers.Authorization = myToken
  return config;
}, function (error) {
  return Promise.reject(error);
});

请求拦截器接收一个函数作为参数,这个函数的第一个参数是请求配置对象。我们可以在这个函数中添加一些额外的参数,比如上面的示例中添加了一个Authorization header,用于在请求中携带token。

响应拦截器的代码示例如下:

axios.interceptors.response.use(function (response) {
  // 对响应数据进行处理
  return response;
}, function (error) {
  // 对响应错误进行处理
  return Promise.reject(error);
});

响应拦截器接收一个函数作为参数,这个函数的第一个参数是响应对象。我们可以在这个函数中对响应数据进行处理,比如成功的响应数据如果需要做一些预处理(比如处理日期格式),都可以放在这里处理。

Vue3封装Axios

尽管Axios非常好用,但在实际开发中,我们经常需要对Axios进行一些定制化的配置,比如添加默认请求头、统一处理请求错误、统一处理返回数据等。在Vue.js中,可以使用Mixin将这些逻辑从组件中抽离出来,实现代码复用和业务逻辑的分离。

下面是一个使用Mixin来封装Axios的示例代码:

import Axios from 'axios';
import { reactive, toRefs } from 'vue';

// 创建一个Axios实例,并进行一些默认配置
const instance = Axios.create({
  baseURL: 'https://jsonplaceholder.typicode.com/'
});

// 创建一个Mixin
export default {
  setup() {
    const state = reactive({
      loading: false, // 是否正在请求
      error: null, // 请求错误信息
      response: null // 响应数据
    });

    // 发送请求的函数
    const sendRequest = async (options) => {
      // 设置加载状态
      state.loading = true;
      state.error = null;
      state.response = null;

      try {
        // 发送请求
        const response = await instance(options);

        // 处理响应数据
        if (response && response.status === 200) {
          state.response = response.data;
        }
      } catch (err) {
        // 处理错误信息
        state.error = err;
      } finally {
        // 取消加载状态
        state.loading = false;
      }
    };

    // 将Axios实例和请求函数添加到全局变量中
    return {
      ...toRefs(state),
      $http: instance,
      $request: sendRequest
    };
  }
};

在上述代码中,我们创建了一个Axios实例,设置了请求的基础URL,然后通过Mixin实现了通用的请求封装。

这里我们通过Vue3的Composition API来建立一个响应式的状态对象(state对象),并将其返回。在请求发起时,我们将state.loading设置为true,然后在请求返回后设置为false。同时,我们还使用try-catch语句对请求错误进行捕获,并返回错误信息。最后,将Axios实例和请求函数添加到返回的对象中,以便在组件中使用。

在实际使用过程中,我们只需要在组件中混入这个Mixin即可:

import axiosMixin from './axiosMixin';

export default {
  name: 'MyComponent',
  mixins: [axiosMixin],
  methods: {
    async fetchData() {
      // 发送请求
      await this.$request({
        method: 'GET',
        url: '/posts'
      });

      // 处理响应数据
      if (this.response) {
        console.log(this.response);
      }

      // 处理错误信息
      if (this.error) {
        console.error(this.error);
      }
    }
  }
};

在上述代码中,我们将axiosMixin混入了组件中,然后在组件中使用了this.$request方法来发送请求,并对响应数据和错误信息进行判断和处理。

总结

本文从Axios的基本使用方法、拦截器和Vue3中的Mixin三个方面详细介绍了如何使用Axios进行请求的发送,并在Vue3中实现了一个简单的Axios封装。希望能够帮助到您在Vue.js开发中使用Axios的过程中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue3学习笔记简单封装axios示例实现 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Vue.js教程之计算属性

    让我来为你详细讲解一下“Vue.js教程之计算属性”的完整攻略。 什么是计算属性? 在 Vue.js 中,计算属性(Computed)是一种在模板中使用的属性,通过计算属性我们可以实现一些动态的内容展示或逻辑处理,并且相较于使用方法或侦听器等方式,计算属性的实现更为简便、高效。 我们可以在 Vue 实例中使用 computed 属性来定义计算属性,该属性是一…

    Vue 2023年5月27日
    00
  • vue props default Array或是Object的正确写法说明

    对于“vue props default Array或是Object的正确写法说明”,主要包括以下内容: 使用函数返回值作为默认值 使用工厂函数生成默认值 示例一:使用函数返回值作为默认值 对于Array类型的props,可以使用函数返回默认值。以下是一个示例: props: { list: { type: Array, default: function(…

    Vue 2023年5月28日
    00
  • vue中为何方法要写在methods的里面

    在Vue中,我们使用methods对象来存储Vue实例中的方法。之所以要将方法写在methods中,是因为Vue框架在初始化Vue实例时,需要遍历所有的data、computed、watch和methods,以及vue定义的生命周期钩子函数,以便进行响应式的绑定与更新。 在methods中定义的方法可以在Vue模板绑定中通过v-on指令进行调用,也可以通过V…

    Vue 2023年5月28日
    00
  • vue3.x中emits的基本用法实例

    下面是详细讲解Vue3.x中emits的基本用法实例的攻略,包含两个示例说明。 Vue3.x中emits的基本用法实例 什么是emits? emits是Vue3新引入的一个选项,它用于为自定义组件声明触发的自定义事件。在Vue3中,$emit方法被移到了组件实例的emits属性中,因此emits属性的主要作用就是声明自定义事件,为自定义组件提供了非常好的解耦…

    Vue 2023年5月28日
    00
  • vue中怎么区分不同的环境

    为了区分不同环境,我们通常需要在vue项目中设置一些不同的配置项。下面是一些常用的方式和示例: 方式一:通过环境变量进行区分 我们可以通过node.js中的process.env对象获取当前运行环境的环境变量,从而判断当前是在哪个环境下。 在vue项目中,我们可以通过设置webpack的DefinePlugin插件来创建一个全局变量process.env,从…

    Vue 2023年5月28日
    00
  • vue组件暴露和.js文件暴露接口操作

    Vue组件暴露 在 Vue 的开发过程中,封装组件是必不可少的一项技能。将组件封装后,我们通常需要将组件暴露出来,使得其他地方可以引用使用。下面是Vue组件暴露的完整攻略: 1. 全局组件 在Vue中,我们可以使用Vue.component()方法来注册全局组件。这样注册后,整个应用的任何组件都可以使用这个组件。 // 定义全局组件 Vue.componen…

    Vue 2023年5月28日
    00
  • vue项目base64字符串转图片的实现代码

    实现base64字符串转图片的代码如下: /** * base64字符串转图片 * @param {String} dataUrl base64字符串 * @return {Object} 图片 Blob 对象 */ function dataURLtoBlob (dataUrl) { const arr = dataUrl.split(‘,’) const…

    Vue 2023年5月27日
    00
  • vue使用swiper插件实现垂直轮播图

    下面是“vue使用swiper插件实现垂直轮播图”的攻略: 一、前提条件 在开始使用Swiper插件制作垂直轮播图之前,我们需要先确定以下条件: 在vue项目中安装Swiper插件,可以通过npm命令行进行安装:npm install swiper –save; 在需要使用轮播图的vue组件中引入Swiper插件:import Swiper from ‘s…

    Vue 2023年5月29日
    00
合作推广
合作推广
分享本页
返回顶部