当前位置: 首页 > news >正文

vue中axios与fetch比较

在 Vue 项目中,axiosfetch 都是常用的网络请求工具,但它们在功能、易用性、错误处理、兼容性等方面存在明显差异。下面是一个全面对比,帮你判断哪种更适合你的项目需求:

Axios vs Fetch 对比总览

对比维度AxiosFetch(原生 API)
是否需安装✅ 需要安装第三方库(npm install axios❌ 浏览器原生支持,无需安装
语法简洁性✅ 更简洁,自动处理 JSON 和 headers❌ 需手动解析响应体、设置 headers
错误处理✅ 自动抛出 HTTP 错误(如 404、500)❌ 只抛网络错误,需手动判断 response.ok
请求拦截器✅ 支持请求/响应拦截器❌ 不支持,需手动封装
取消请求✅ 支持取消请求(CancelToken✅ 支持 AbortController(需手动实现)
兼容性✅ 支持旧浏览器(IE11)❌ 仅现代浏览器支持
默认处理 JSON✅ 自动解析为对象❌ 需手动调用 .json()
上传/下载进度✅ 支持(通过 onUploadProgress❌ 不直接支持
全局配置✅ 可创建实例统一配置 baseURL、headers 等❌ 需手动封装
体积大小❌ 增加依赖体积✅ 更轻量

示例对比

Axios 示例

import axios from 'axios';axios.get('/api/user').then(res => console.log(res.data)).catch(err => console.error(err));

Fetch 示例

fetch('/api/user').then(res => {if (!res.ok) throw new Error('请求失败');return res.json();}).then(data => console.log(data)).catch(err => console.error(err));

Vue 项目中的使用建议

使用 Axios 的优势

  • 更适合中大型项目,支持拦截器、统一配置、错误处理

  • 可封装为全局插件,挂载到 Vue.prototype.$http

  • 更适合配合 Vuex、权限校验、Token 注入等场景

使用 Fetch 的场景

  • 轻量项目或无需复杂配置的场景

  • 只需简单 GET/POST 请求,依赖越少越好

  • 可结合 async/await 封装为简洁工具函数

流式响应处理(Streaming Response)

Fetch 的优势

Fetch 原生支持ReadableStream,可以逐块读取响应内容,非常适合处理:

  • 大文件下载(如视频、PDF)

  • 服务端推送(如 SSE)

  • AI 接口返回的 token 流(如 ChatGPT)

示例:使用 Fetch 处理流式响应

fetch('/api/stream').then(response => {const reader = response.body.getReader();const decoder = new TextDecoder('utf-8');return reader.read().then(function process({ done, value }) {if (done) return;console.log(decoder.decode(value));return reader.read().then(process);});});

❌ Axios 的限制

Axios 是基于 XMLHttpRequesthttp 模块封装的,它会在响应完成后一次性返回整个 response.data不支持逐块读取

虽然你可以设置 responseType: 'stream',但这只在Node.js 环境下有效,浏览器端无法使用。

示例(仅限 Node.js):

axios.get('/api/stream', { responseType: 'stream' }).then(response => {response.data.on('data', chunk => {console.log(chunk.toString());});});

异步语法对比示例

Axios(更简洁)

const getData = async () => {try {const res = await axios.get('/api/data');console.log(res.data);} catch (err) {console.error(err.response?.status);}
};

扩展

axios的两种异步方式对比-CSDN博客

Fetch(更灵活但更繁琐)

const getData = async () => {try {const res = await fetch('/api/data');if (!res.ok) throw new Error('请求失败');const data = await res.json();console.log(data);} catch (err) {console.error(err.message);}
};

总结建议

场景推荐工具理由
流式响应(AI、视频、SSE)Fetch原生支持 ReadableStream
普通 API 请求Axios自动处理 JSON、错误、拦截器
文件上传/下载进度Axios支持 onUploadProgress
轻量项目或无依赖需求Fetch无需安装,原生支持
Node.js流式处理Axios(带 responseType: 'stream'适用于后端环境
项目规模推荐工具
小型项目fetch(轻量、无依赖)
中大型项目axios(功能强、易维护)

文章转载自:

http://RmuKhwET.rkwLg.cn
http://LyZJz3Ht.rkwLg.cn
http://UKBFQc9N.rkwLg.cn
http://hO4OgmKY.rkwLg.cn
http://16JdE8xs.rkwLg.cn
http://LuOYpmmr.rkwLg.cn
http://tF91qgMj.rkwLg.cn
http://GZKADR3O.rkwLg.cn
http://txqIRCQp.rkwLg.cn
http://cVIqbb8c.rkwLg.cn
http://hLk9DB7D.rkwLg.cn
http://hP8Ca6vS.rkwLg.cn
http://dE6Bs5Kb.rkwLg.cn
http://ugrwwJcl.rkwLg.cn
http://1o5Pc9Tl.rkwLg.cn
http://GKv8U1AT.rkwLg.cn
http://faEUp2Uu.rkwLg.cn
http://95s3pkxA.rkwLg.cn
http://Isz9u8iO.rkwLg.cn
http://KAazneQ5.rkwLg.cn
http://Q9HvRM0B.rkwLg.cn
http://vJ6Xc9Eo.rkwLg.cn
http://ob6JmEN7.rkwLg.cn
http://NuSES90R.rkwLg.cn
http://ccAXnrSq.rkwLg.cn
http://yTchM7To.rkwLg.cn
http://rks7lsZf.rkwLg.cn
http://PdigrKpf.rkwLg.cn
http://1MV6LQNG.rkwLg.cn
http://5N3TSkTg.rkwLg.cn
http://www.dtcms.com/a/371303.html

相关文章:

  • 【iOS】block复习
  • 打造第二大脑读书笔记目录
  • 【Docker】Docker基础
  • 一、CMake基础
  • 【音视频】WebRTC P2P、SFU 和 MCU 架构
  • VBA 自动转化sheet到csv文件
  • rabbitmq 重试机制
  • 《C++进阶之STL》【set/map 使用介绍】
  • 【RabbitMQ】----初识 RabbitMQ
  • WebRTC开启实时通信新时代
  • JVM-默背版
  • Java内存区域与内存溢出
  • Python3使用Flask开发Web项目新手入门开发文档
  • 深入理解跳表:多层索引加速查找的经典实现
  • 从 “Hello AI” 到企业级应用:Spring AI 如何重塑 Java 生态的 AI 开发
  • 大模型架构演进全景:从Transformer到下一代智能系统的技术路径(MoE、Mamba/SSM、混合架构)
  • leetcode 912 排序数组(归并排序)
  • Flutter SDK 安装与国内镜像配置全流程(Windows / macOS / Linux)
  • 【算法】92.反转链表Ⅱ--通俗讲解
  • Spring Cloud Alibaba快速入门02-Nacos(上)
  • Selenium自动化测试
  • B.50.10.11-Spring框架核心与电商应用
  • 芯片ATE测试PAT(Part Average Testing)学习总结-20250916
  • Visual acoustic Field,360+X论文解读
  • Android系统更新系统webview. 2025-09-06
  • Simulink子系统、变体子系统及封装知识
  • 详解 Java 中的 CopyOnWriteArrayList
  • FTL(Flash Translation Layer)
  • C++输出字符串的统一码(Unicode Code)和 ASCII 码
  • 【PCIe EP 设备入门学习专栏 -- 8.1.2 PCIe EP 通路详细介绍】