axios请求拦截器错误_React中使用高阶组件和axios的拦截器,统一处理请求失败提示...
在前端开发中,判断边界条件和重要,通常我们要花费开发中的很大一部分时间做边界条件处理。发送ajax请求时,假设有这样一个需求: 每个页面发送ajax请求,如果请求失败,在页面上统一弹出样式一样的错误提示。这该怎么做呢?
每个页面都去引用一个错误提示组件,然后在业务逻辑中去一遍遍写错误处理的代码吗?显然有点low,这个时候,可以用React中的高阶组件,配合axios的拦截器,解决这个问题。
第一步,我们写出项目中的根组件:
class App extends Component {
render() {
return (
)
}
componentDidMount() {
axios.get('/index.json')
.then(()=>{})
.catch(()=>{})
}
}
这个组件中,我们只是做了ajax请求,失败的时候并没有做任何处理。
第二步,我们来写一个高阶组件
export default (WrappedComponent) => {
return class extends Component {
constructor(props) {
super(props)
this.state = {
error: false
}
}
componentWillMount() {
axios.interceptors.response.use((response) => {
return response;
}, (error) => {
this.setState({
error: true
})
return Promise.reject(error);
});
}
render() {
const errorElem = this.state.error ?
: null
return (
{ errorElem }
)
}
}
}
在高阶组件中,我们对原始组件做了一个封装,在组件外部增加了一个请求出错提示的div,然后通过高阶组件的state数据控制div的隐藏和显示,而何时隐藏和显示,要看axios注入器的处理情况,如果请求正常发送,div不会显示,如果请求异常,高阶组件会把div显示出来。
另外我们把拦截器定义在componentWillMount中,是为了在页面执行ajax请求发送之前,就把拦截器准备好。如果放在componentDidMount中,会导致拦截器拦截不到子组件的请求异常,因为父组件要等所有子组件的componentDidMount都执行完毕,才会执行自己的componentDidMount,这个时候增加拦截器,已经无法对子组件发出的请求做拦截了。
最后一步,我们要对整个应用的最外层应用一下高阶组件,记得,一定要把高阶组件用在最外层组件上,不然有可能会导致axios拦截器多次被定义,产生代码bug。
const HocApp = hoc(App)
ReactDOM.render(, document.getElementById('root'));
通过上面几步代码,我们就实现了想要的功能,无论你在App下增加多少层子组件,只要组件中ajax发生错误,就会在页面上显示出来
这段内容。
这个实现是目前想到的一个实现方式,大家如果有其他方式,欢迎留言探讨!
axios请求拦截器错误_React中使用高阶组件和axios的拦截器,统一处理请求失败提示...相关推荐
- React中的高阶组件
React中的高阶组件 高阶组件HOC即Higher Order Component是React中用于复用组件逻辑的一种高级技巧,HOC自身不是React API的一部分,它是一种基于React的组合 ...
- React 中的高阶组件及其应用场景
本文目录 什么是高阶组件 React 中的高阶组件 属性代理(Props Proxy) 反向继承(Inheritance Inversion) 高阶组件存在的问题 高阶组件的约定 高阶组件的应用场景 ...
- 理解react中的高阶组件和高阶函数
高阶组件 ES6中使用关键字class来使它的语法有和 类 相似的写法和功能,但是它的本质还是一个函数. 因此,高阶组件本质上是一个函数,只是这种组件(函数)接收一个组件,返回一个新的组件. 比如下面 ...
- react——@修饰器——高阶组件的使用——通过装饰器来调用高阶组件——简单修改样式
使用装饰器@ 装饰器 用来装饰类的,可以增强类,在不修改类的内部的源码的同时,增强它的能力(属性或方法) 装饰器使用@函数名写法,对类进行装饰,目前在js中还是提案,使用需要配置相关兼容代码库. re ...
- React中自定义高阶组件的应用(HOC)
什么是HOC? HOC(Higher-order component)是一种React 的进阶使用方法,只要还是为了便于组件的复用.强调一点,HOC本身并不是 React API, 它就是一个方法,一 ...
- chapter2.3、react高阶组件,装饰器
React 技术 高阶组件 let Root = props => <div>{props.schoolName}</div>; 如果要在上例的Root组件进行增强怎么办 ...
- react 给一个引用的组件添加新属性_高阶组件在React中的应用
高阶组件的定义 接受React组件作为输入,输出一个新的React组件. 概念源自于高阶函数,将函数作为参数,或者输出一个函数,如map,reduce,sort. 用haskell的函数签名来表示: ...
- 【哔哩哔哩播放器】2020最新版高仿哔哩哔哩视频播放器网站源码
[哔哩哔哩播放器]2020最新版高仿哔哩哔哩视频播放器网站源码 Lan 2020-05-12 10:06 190 人阅读 0 条评论 2020最新版高仿哔哩哔哩视频播放器网站源码,支持弹 ...
- python中的高阶函数
python中的高阶函数 文章目录: 1 什么是高阶函数? 1.1 高阶函数:一个函数的`函数名`作为参数传给另外一个函数 1.2 高阶函数:一个函数返回值(return)为另外一个`函数` 2 py ...
最新文章
- python 3.7.3 运算7错误_Python中通常不应该犯的7个错误
- LiveVideoStackCon 2022 上海站延期通告(内附最新日程海报)
- C++中void和void*指针的含义 (指针类型的含义)
- 前端程序员书桌上不可缺少的CSS书籍
- dexpler的使用方法
- 机器学习系统设计与建议
- Windows用户名中文修改英文无感实现操作方法
- 全外显子测序(WES)由入门到精通记录
- 解决:log4j警告:WARN Please initialize the log4j system properly
- 采用KubeSphere的kk,部署安装多节点服务的kubernetes-v1.18.6和kubesphere-v3.0.0的踩坑过程记录,及反思
- OpenGL学习002-配置GLAD
- Python tkinter库Canvas操作(附涂鸦、颜色表、围棋盘三个实例)
- meltdown linux 补丁,宋宝华: ARM64 Linux meltdown修复补丁KPTI的最重要3个patch
- Android监听前后台切换展示开屏广告
- 解锁Windows所有电源选项
- 从画面质量看国产3D网游的技术性崛起
- springCloud-Alibaba整理思考
- iOS 16 swift 横屏适配
- 跨境新时代|2021 跨境电商趋势发展论坛成功举行
- 电子工程师,硬件工程师培训资料
热门文章
- C#实现小写金额转大写金额
- Server.MapPath方法的应用方法(转)
- C++之sizeof(vector)
- Android源码编译Android Studio(带jar和jni)工程
- Go一个协程实现加法demo
- golang中apend_golang的append()为什么不会影响slice的地址?
- win10连接mysql服务器频繁断线_MySQL连接数过多导致服务无法正常运行
- android搜索框布局文件,android搜索框列表布局,流程及主要步骤思维导图
- Python实现七段数码管时钟(动态刷新版)
- python连续质数计算代码分析,素性测试的Miller-Rabin算法完全解析 (C语言实现、Python实现)...