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

axios 与 fetch 的区别

1. 浏览器兼容性
  • fetch:是现代浏览器原生支持的 API,但是旧版本浏览器(如 IE)不支持,需要使用 polyfill 来兼容。
  • axios:可以在所有现代浏览器以及旧版本浏览器中使用,因为它是基于 XMLHttpRequest 封装的,所以兼容性更好。
2. 请求拦截和响应拦截
  • fetch:本身没有内置的拦截器机制,如果需要实现请求拦截和响应拦截,需要手动封装。
  • axios:提供了强大的拦截器功能,可以在请求发送前和响应返回后进行统一处理,比如添加请求头、错误处理等。
3. 错误处理
  • fetch:只有在网络请求失败(如网络中断)时才会 reject,而对于 HTTP 错误状态码(如 404、500),仍然会 resolve,需要手动检查响应状态码。
  • axios:当 HTTP 状态码不是 2xx 时,会 reject,方便进行错误处理
4. 取消请求
  • fetch:在旧版本中没有内置的取消请求机制,需要使用 AbortController 来实现。
  • axios:提供了 CancelToken 来取消请求,使用起来更方便。

1. 底层设计与兼容性

Axios:基于 XMLHttpRequest 封装,兼容 IE11+(需 polyfill),适合企业级项目

Fetch:原生 API(ES6+),现代浏览器(Chrome 42+、Firefox 39+)直接支持,适合轻量级应用。

2. 请求 / 响应处理
  • Axios
    • 自动转换 JSON:响应数据直接解析为对象。
    • 拦截器:全局处理请求头、响应错误(如自动刷新 token)。
    • Fetch
    • 手动解析响应:需显式调用 res.json()res.text() 等。
    • 无内置拦截器:需手动封装(如封装 fetchWrapper)。
3. 错误处理机制
  • Axios
    • 网络错误、4xx/5xx 状态码均会触发 catch
    • 响应对象包含完整信息(如 err.response.status)。
  • Fetch
    • 仅网络错误触发 catch,4xx/5xx 需手动检查 res.ok
4. 取消请
5. 进度监控

6. 项目选型建议

场景推荐方案理由
企业级应用(需 IE 兼容)Axios完整的错误处理、拦截器机制,减少重复代码
微前端 / 小型项目Fetch + 自定义封装减少 bundle 体积(Axios ~18KB,Fetch 0KB)
文件上传 / 下载Axios内置进度监控,简化开发
框架集成(React/Vue)Axios + 状态管理

结合 Redux Middleware 或 Vuex 统一处理 API 请求

7. 实战封装示例(Fetch)

总结
  • Axios:功能全面,适合追求开发效率和兼容性的项目。
  • Fetch:轻量原生,适合对体积敏感或不需要复杂功能的场景。

项目中使用Axios或Fetch时如何处理错误?

如何在项目中选择使用Axios还是Fetch?

在项目中使用Fetch发送POST请求时如何设置请求体?

http://www.dtcms.com/a/273984.html

相关文章:

  • C++前缀和与差分的深度探索
  • “SRP模型+”多技术融合在生态环境脆弱性评价模型构建、时空格局演变分析与RSEI 指数的生态质量评价及拓展应用
  • K8s Service 终极解析:源码、性能、故障排查全攻略
  • 【VScode | 快捷键】全局搜索快捷键(ctrl+shift+f)失效原因及解决方法
  • Github创建仓库并通过VS Code推送项目
  • FPGA开发一个精确反馈控制算法 实现动态调控电磁反馈,控制流过线圈的电流,产生不同大小不同方向的磁力 电路结构设计PCB版图的绘制
  • 小白学Python,标准库篇——随机库、正则表达式库
  • Rail开发日志_5
  • 物联网与互联网融合生态
  • 鸿蒙 Secure Boot 全流程解析:从 BootROM 到内核签名验证的实战指南
  • 使用Selenium自动化获取抖音创作者平台视频数据
  • 深入解析:UPF/PGW-U如何通过PPP/L2TP隧道实现终端PAP/CHAP接入
  • [python]在drf中使用drf_spectacular
  • FPGA通信设计十问
  • 液冷智算数据中心崛起,AI算力联动PC Farm与云智算开拓新蓝海(二)
  • MyBatis02-mybatis-config.xml配置文件讲解
  • Django--02模型和管理站点
  • 链表算法之【判断链表中是否有环】
  • 从零实现一个GPT 【React + Express】--- 【3】解析markdown,处理模型记忆
  • RapidFuzz-CPP:高效字符串相似度计算的C++利器
  • ICLR 2025 | InterpGN:时间序列分类的透明革命,Shapelet+DNN双引擎驱动!
  • 【TCP/IP】18. 因特网服务质量
  • 输入流挂起
  • Promise :then 与 catch 同时触发
  • AIStarter新版重磅来袭!永久订阅限时福利抢先看
  • 精准安装追踪:openinstall 如何让邀请码绑定更智能?
  • 瑞士四种官方语言探秘:多元文化的和谐交融
  • 用Netplan配置网桥bridge笔记250711
  • 飞算 JavaAI:开启 Java 开发新时代
  • 单链表,咕咕咕