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

【大前端】React统计所有网络请求的成功率、失败率以及统一入口处理失败页面

React 如何去统一统计所有网络请求的成功率、失败率。以及如何在统一入口处理失败页面呢?这个问题其实分成两块来看:

  1. 统一统计所有网络请求的成功率 / 失败率
  2. 统一入口处理失败页面(例如跳转到错误页 / Toast 提示 / 弹窗等)

1. 统一统计网络请求的成功率、失败率

在 React 应用中常见的网络请求方式是:

  • fetch
  • axios
  • 封装过的 request 方法

✅ 方案一:对 fetch 进行全局封装

你可以在应用启动时,替换全局的 window.fetch

// request.js
const originFetch = window.fetch;window.fetch = async (...args) => {const start = Date.now();try {const response = await originFetch(...args);if (!response.ok) {reportFailure(args, response.status, Date.now() - start);} else {reportSuccess(args, Date.now() - start);}return response;} catch (error) {reportFailure(args, 'network_error', Date.now() - start);throw error;}
};function reportSuccess(args, duration) {console.log('✅ success:', args, duration);// 上报到埋点 / 监控平台
}function reportFailure(args, code, duration) {console.log('❌ fail:', args, code, duration);// 上报到埋点 / 监控平台
}

这样所有基于 fetch 的请求,都会自动记录成功率/失败率。


✅ 方案二:axios 拦截器

如果你用的是 axios,更推荐拦截器方式:

// request.js
import axios from "axios";const instance = axios.create({timeout: 10000,
});instance.interceptors.response.use((response) => {reportSuccess(response.config.url, response.status);return response;},(error) => {if (error.response) {reportFailure(error.config.url, error.response.status);} else {reportFailure(error.config?.url, 'network_error');}return Promise.reject(error);}
);function reportSuccess(url, status) {console.log('✅ success:', url, status);// 上报监控
}function reportFailure(url, status) {console.log('❌ fail:', url, status);// 上报监控
}export default instance;

之后你只用 instance.get/post(...),所有请求都会被统计。


2. 统一入口处理失败页面

一般有两种思路:

✅ 方式一:在请求层做统一错误处理

比如 axios 拦截器里直接做跳转:

import { useNavigate } from "react-router-dom";instance.interceptors.response.use((res) => res,(error) => {if (error.response?.status === 500) {window.location.href = "/error"; // 或者 React Router navigate}return Promise.reject(error);}
);

这样所有 500 错误都会自动跳转到错误页。


✅ 方式二:在 React 组件层做统一兜底

  • 使用 ErrorBoundary 捕获渲染错误(UI 异常)。
  • 使用 请求状态管理器(如 react-query / SWR),在全局配置里设置 onError 统一处理。

例如 React Query:

import { QueryClient, QueryClientProvider } from 'react-query';const queryClient = new QueryClient({defaultOptions: {queries: {onError: (error) => {console.error("请求失败:", error);// 这里可以统一处理,比如跳转错误页},},},
});function App() {return (<QueryClientProvider client={queryClient}><YourApp /></QueryClientProvider>);
}

推荐最佳实践

  • 请求层:拦截器统一统计成功/失败率
  • 错误处理:结合 React Router + 全局错误页面
  • 复杂项目:使用 React Query/SWR 统一管理请求状态

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

相关文章:

  • Ubuntu22.04安装OBS
  • 嵌入式系统学习Day23(进程)
  • 2025.8.26总结
  • 【系统架构设计(二)】系统工程与信息系统基础中:信息系统基础
  • 数据结构青铜到王者第四话---LinkedList与链表(1)
  • 【SystemUI】新增实体键盘快捷键说明
  • 【SystemUI】锁屏点击通知显示的解锁界面和通知重叠
  • [Sync_ai_vid] 唇形同步推理流程 | Whisper架构
  • 技术分享︱国产化突破:开源MDO工具链在新一代神威超算上的安装与调试
  • DevExpress WinForms中文教程:Data Grid - Excel样式的自定义过滤器对话框
  • 在Excel和WPS表格中输入分数的两种方法
  • 自然处理语言NLP: 基于双分支 LSTM 的酒店评论情感分析模型构建与实现
  • PostgreSQL快速入门
  • 会议室预约小程序主要功能及预约审批流程
  • Java大厂面试全解析:从Spring Boot到微服务架构实战
  • Hadoop MapReduce 任务/输入数据 分片 InputSplit 解析
  • ProfiNet转CAN/CANopen网关技术详解-三格电子
  • uniapp uview吸顶u-sticky 无效怎么办?
  • 利用Certbot生成ssl证书配置到nginx
  • Android之穿山甲广告接入
  • Flutter 项目命名规范 提升开发效率
  • 深度学习(三):PyTorch 损失函数:按任务分类的实用指南
  • Swift 解法详解 LeetCode 363:矩形区域不超过 K 的最大数值和
  • Unity游戏打包——Mac基本环境杂记
  • Android Glide生命周期管理:实现原理与最佳实践
  • ubuntu2204安装搜狗拼音输入法
  • 基于spark的招聘岗位需求分析可视化系统设计与实现
  • 《相关法律、法规知识(五)》
  • 【数据结构】串——模式匹配
  • 微服务-23.网关登录校验-自定义GlobalFilter