vue3中封装Axios请求及在组件中使用详解

一、前言

在Vue项目中,我们经常会用到Axios来进行数据交互。Vue3在新特性和性能上都进行了优化和改进,所以我们也需要在封装Axios请求和使用Axios时做相应的调整。

二、封装Axios请求

我们在Vue项目中经常用到Axios,并且需要统一处理一些请求和响应的拦截器,这时我们可以封装一个Axios请求工具,以提高代码的复用性和可维护性。

1.安装Axios

首先,我们需要在项目中安装Axios:

npm install axios --save

2.封装Axios

创建一个新的api.js文件,该文件用于封装Axios请求,并暴露封装后的Axios请求函数:

import axios from 'axios';

// 创建一个新的axios实例
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API,
  timeout: 5000 // 请求超时时间
});

// 请求拦截器
service.interceptors.request.use(
  config => {
    // 在请求发送前对请求进行处理
    config.headers['Authorization'] = 'Bearer ' + getToken();
    return config;
  },
  error => {
    // 请求错误处理
    console.log(error); // for debug
    return Promise.reject(error);
  }
);

// 响应拦截器
service.interceptors.response.use(
  response => {
    const res = response.data;
    if (res.code !== 20000) {
      // 处理错误
      return Promise.reject(new Error(res.msg || 'Error'));
    } else {
      return res;
    }
  },
  error => {
    // 响应错误处理
    console.log('err' + error); // for debug
    return Promise.reject(error);
  }
);

export default function axiosRequest(options) {
  return new Promise((resolve, reject) => {
    service(options)
      .then(response => {
        resolve(response);
      })
      .catch(error => {
        reject(error);
      });
  });
}

在上面的代码中,我们首先使用axios.create()来创建一个新的axios实例,然后分别定义了请求拦截器和响应拦截器,并在请求拦截器中添加了token等处理和在响应拦截器中添加了错误处理。最后,我们把已封装的Axios请求函数暴露出来。

三、在组件中使用Axios

当我们已经封装了Axios请求函数后,我们可以在Vue组件中使用该函数,从而进行数据请求和响应处理。

1.使用Axios请求

在Vue组件中引入api.js,然后根据实际需求来调用已封装的Axios请求函数:

<template>
  ...
</template>

<script>
import axiosRequest from '@/utils/request';

export default {
  data() {
    return {
      data: []
    };
  },
  created() {
    this.getUserList();
  },
  methods: {
    getUserList() {
      axiosRequest({
        url: '/user/list',
        method: 'get',
        params: { username: 'xxx', age: 20 }
      })
        .then(response => {
          this.data = response.data;
        })
        .catch(error => {
          console.log(error);
        });
    }
  }
};
</script>

在上面的代码中,我们在组件中引入了api.js,并在created()钩子函数中调用getUserList()方法来发起Axios请求。在getUserList()方法中,我们调用已封装的Axios请求函数axiosRequest,该函数接收一个配置对象options,该对象包含url、method和params等属性来指定请求的url、请求的方法和请求的参数。通过.then()和.catch()方法来处理请求的响应结果和错误。

2.使用Axios取消请求

在某些情况下,我们需要在组件销毁前取消正在进行的Axios请求,以避免数据泄漏和页面卡顿。在Vue3中,取消Axios请求可以使用Axios提供的CancelToken来实现。

先来看一个示例:

<template>
  ...
</template>

<script>
import axiosRequest from '@/utils/request';

export default {
  setup() {
    let source = axios.CancelToken.source();

    const getUserList = () => {
      axiosRequest({
        url: '/user/list',
        method: 'get',
        params: { username: 'xxx', age: 20 },
        cancelToken: source.token
      })
        .then(response => {
          console.log(response.data);
        })
        .catch(error => {
          console.log(error);
        });
    };

    const cancelRequest = () => {
      source.cancel('取消请求');
    };

    // 在组件销毁前取消请求
    onBeforeUnmount(() => {
      cancelRequest();
    });

    return { getUserList };
  }
};
</script>

在上面的代码中,我们首先使用axios.CancelToken.source()创建一个新的source实例,然后在getUserList()方法中添加了cancelToken属性,该属性值为source.token,表示发送请求时的cancelToken为source.token。同时,我们也定义了cancelRequest()方法,该方法调用source.cancel('取消请求')来取消正在进行的请求。最后,我们通过onBeforeUnmount()生命周期函数来在组件销毁时调用cancelRequest()方法,从而达到取消Axios请求的效果。

四、总结

在Vue3中,我们需要对Axios请求进行封装和调整,以提高代码的复用性、可维护性和性能。同时也要注意在组件中取消进行中的Axios请求,以避免数据泄漏和页面卡顿。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue3中封装Axios请求及在组件中使用详解 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • iOS指纹验证TouchID应用学习教程

    iOS指纹验证TouchID应用学习教程 介绍 iOS指纹验证TouchID应用可以为您的应用提供更安全的用户身份验证方式,以代替传统的用户密码。本教程将介绍如何在iOS应用中实现TouchID验证功能。 在使用TouchID验证之前,您需要在使用TouchID之前请求用户的授权,请求授权时需要提供跨平台支持的身份验证系统。 步骤一:导入依赖库和框架 使用T…

    other 2023年6月26日
    00
  • java启动时自定义配置文件路径,自定义log4j2.xml位置方式

    Java启动时自定义配置文件路径和自定义log4j2.xml位置的方法主要有两种:命令行参数和系统属性。 命令行参数 通过命令行参数指定配置文件的路径和log4j2.xml的位置是较为常见的方法。通过将路径传递给Java应用程序的启动脚本,应用程序能够使用指定的配置文件和日志设置。以下是具体步骤: 步骤1:编写log4j2.xml文件 首先编写log4j2.…

    other 2023年6月25日
    00
  • Android如何在Gradle中更改APK文件名详解

    如果你想在构建Android工程时修改APK文件名,可以通过以下方式实现: 步骤1:打开build.gradle文件 在你的Android工程目录下,打开build.gradle文件,一般有两个文件,一个是app/build.gradle,另一个是project/build.gradle。我们需要修改的是app/build.gradle文件。 步骤2:添加如…

    other 2023年6月26日
    00
  • win10 RS1技术预览版11103运行界面曝光 含平板模式

    Win10 RS1技术预览版11103运行界面曝光攻略 简介 Win10 RS1技术预览版11103是Windows 10操作系统的一个早期测试版本,该版本的运行界面曝光了一些新的功能和改进。本攻略将详细介绍如何获取和安装该预览版,并展示其中的平板模式功能。 步骤一:获取预览版 首先,访问微软的Windows Insider网站(https://inside…

    other 2023年8月3日
    00
  • Hadoop自学系列集(三) — Hadoop安装

    Hadoop自学系列集(三) — Hadoop安装 本文将介绍如何安装配置Hadoop单机伪分布式环境,以及如何验证Hadoop安装是否成功。 准备工作 在开始安装Hadoop之前,需要进行以下准备工作: Java环境:Hadoop是基于Java编写的,因此需要先安装Java环境,版本需为Java 8及以上版本。 Hadoop安装包:可以从官网http:…

    其他 2023年3月28日
    00
  • 从内存地址解析Java的static关键字的作用

    从内存地址解析Java的static关键字的作用 在Java中,static关键字用于声明静态成员,它可以应用于变量、方法和代码块。static关键字的作用是使成员与类相关联,而不是与类的实例相关联。下面将详细解释static关键字的作用。 静态变量 静态变量是在类级别上定义的变量,它们在内存中只有一份拷贝,被所有类的实例共享。静态变量可以通过类名直接访问,…

    other 2023年8月8日
    00
  • NBA2K16按键失灵怎么办 NBA2K16按键失灵问题的解决方法

    解决 NBA2K16 按键失灵的方法主要有以下几种: 1.检查键盘或手柄 按键失灵可能是因为键盘或手柄出了问题,因此我们需要检查它们是否正常工作。可以将键盘或手柄连接到其他设备上测试,看看是否存在问题。如果其他设备上也无法正常使用,可能需要更换键盘或手柄。 2.重新安装游戏 有时候游戏的文件出现错误或损坏,也会导致按键失灵等问题。这个时候可以尝试重新安装游戏…

    other 2023年6月27日
    00
  • Ubuntu中实现Docker内安装jenkins+jenkins远程触发

    我将为您提供 Ubuntu 中实现 Docker 内安装 Jenkins + Jenkins 远程触发的完整攻略,包括 Docker 的安装、Jenkins 的安装和配置、Jenkins 远程触发的设置,同时提供两个示例说明。 Docker 的安装 在 Ubuntu 中,可以使用以下命令安装 Docker: sudo apt-get update sudo …

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