import React from 'react'
import { Route, Switch, withRouter } from 'react-router-dom'
import axios from 'axios'
import { Toast } from 'antd-mobile'
import ReactDOM from 'react-dom'
import Error from '../components/Error'
import Home from '../pages/Home'
import NoPage from '../pages/404'
import Login from '../pages/Login'
class Interceptors extends React.Component {
constructor(props) {
super(props)
this.errorDom = null
this.cancel = null
}
componentDidMount() {
// 监听路由变化
this.props.history.listen(route => {
if (this.cancel) {
this.cancel("取消请求")
Toast.hide()
}
})
}
renderError() {
if (this.errorDom) {
return
}
this.errorDom = document.createElement('div')
ReactDOM.render(
<Error reload={() => {
this.errorDom.remove()
window.location.reload()
}}
goBack={() => {
this.errorDom.remove()
this.props.history.goBack()
}}
/>, this.errorDom)
document.body.appendChild(this.errorDom)
}
componentWillMount() {
let cancelToken = axios.CancelToken
/**
* 添加请求拦截器
*/
axios.interceptors.request.use(config => {
this.errorDom && this.errorDom.remove()
config.headers['token'] = getToken()
config.cancelToken = new cancelToken(c => {
this.cancel = c
})
return config
}, error => {
return Promise.reject(error)
})
/**
* 添加响应拦截器
*/
axios.interceptors.response.use(response => {
const { data, msg, success } = response.data
if (success === -1) {
this.props.history.push('/login')
return ''
}
if (success === false) {
Toast.info(msg, 2)
return Promise.reject(msg)
}
return data || response.data
}, error => {
if (axios.isCancel(error)) {
return Promise.reject(error)
}
Toast.fail('服务器出错', 2)
this.renderError()
return Promise.reject(error)
})
}
render() {
return (
<div>
<Switch>
<Route path='/home' component={Home} />
<Route path='/404' component={NoPage} />
<Route path='/login' component={Login} />
</Switch>
</div>
)
}
}
export default withRouter(Interceptors)
react 离开页面 axios 取消请求
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 最近在工作中遇到这样的需求,新用户在第一次登录的时候需要强制修改密码。刚开始接到这个需求的时候,心里想着在axio...