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日

相关文章

  • PopupWindow使用方法详解

    PopupWindow使用方法详解 介绍 PopupWindow是Android中的一个弹出窗口,可以在屏幕上方或下方显示,用于显示额外的内容或菜单选项。它可以用于各种场景,如下拉菜单、提示框等。 步骤 步骤一:创建PopupWindow对象 首先,我们需要创建一个PopupWindow对象。可以使用以下代码创建一个PopupWindow对象: PopupW…

    other 2023年9月6日
    00
  • Win10照片应用打不开怎么解决?Win10重置/重装照片应用程序的方法

    Win10照片应用打不开怎么解决? 如果你的Win10操作系统中的照片应用无法正常打开,或打开后闪退,那么可能是该应用出了些问题,此时你可以尝试以下的这些解决方法。 方法一:尝试重置照片应用 打开“设置”应用,点击“应用”并找到“照片”应用,点击它。 在新页面中,点击“高级选项”按钮。 在下拉菜单中选择“重置”。 等待一段时间,再尝试打开照片应用,看看是否问…

    other 2023年6月25日
    00
  • iOS UITableView 与 UITableViewController实例详解

    首先我们需要明确UITableView和UITableViewController的概念。 UITableView是iOS中的一个视图控件,是显示列表数据的主要视图组件,通过UITableView可以方便的展示和管理大量的数据。 UITableViewController则是UIKit库中特定的视图控制器,主要作用是管理UITableView视图。UITab…

    other 2023年6月26日
    00
  • 域名必备知识 域名名词解释大全

    域名必备知识 域名名词解释大全 1. 域名解析(Domain Name Resolution) 域名解析是将域名转换为IP地址的过程。当用户在浏览器中输入一个域名时,浏览器会向域名解析服务器发送请求,解析服务器会返回与该域名对应的IP地址,然后浏览器才能通过IP地址找到对应的网站。 示例说明: 假设用户在浏览器中输入了域名\”www.example.com\…

    other 2023年8月5日
    00
  • Windows网络工具包NETSH常见问题解答

    Windows网络工具包NETSH常见问题解答攻略 什么是NETSH? NETSH是Windows操作系统中的一个命令行工具,用于配置和管理网络接口、协议和服务。它提供了一种简单而强大的方式来管理网络设置,包括IP地址、DNS服务器、防火墙规则等。 常见问题解答 问题1:如何查看当前网络接口的配置信息? 要查看当前网络接口的配置信息,可以使用以下命令: ne…

    other 2023年8月5日
    00
  • VisualStudio Code怎么切换大小? vscode代码切换大小写的教程

    Visual Studio Code 切换大小写的教程 Visual Studio Code 是一款功能强大的代码编辑器,它提供了许多快捷键和功能来提高开发效率。下面是关于如何在 Visual Studio Code 中切换大小写的完整攻略。 方法一:使用快捷键 Visual Studio Code 提供了一组快捷键来切换选中文本的大小写。以下是常用的快捷键…

    other 2023年8月16日
    00
  • 叮咚FM如何查看版本号?叮咚FM查看版本号方法

    叮咚FM如何查看版本号攻略 叮咚FM是一款流行的音频应用程序,如果你想查看它的版本号,可以按照以下步骤进行操作: 打开叮咚FM应用程序:在你的手机上找到叮咚FM应用程序的图标,并点击打开。 进入设置页面:在叮咚FM的主界面上,通常会有一个设置图标,它通常是一个齿轮或者三个竖直排列的点。点击这个图标,进入设置页面。 查找关于页面:在设置页面中,你需要找到一个关…

    other 2023年8月2日
    00
  • 关于docker:mkdir命令与dockerfile的操作

    关于Docker: mkdir命令与Dockerfile的操作攻略 Docker是一种流行的容器化平台,可以帮助我们轻松地构建、部署和管理应用程序。在Docker中,我们可以使用mkdir命创建目录,并使用Dockerfile来定义容器的构建过程。本攻略将介绍如何使用mkdir命令创建目录,并使用ockerfile来构建容器,并提供两个示例。 mkdir命令…

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