React-router-dom如何在封装的axios中实现跳转
发布于 1 年前 作者 1261407209LHH 2555 次浏览 来自 问答

这里使用的是createBrowserHistory({forceRefresh:true}强制刷新的做法,除了这个还有其他方法吗,用的是React-routerV4

// history
import { createBrowserHistory } from "history";
export default createBrowserHistory({forceRefresh:true}); 

import axios from "axios"; 
import {fakeAuth} from '../util/fakeAuth';
import {message as Message} from 'antd';
import {timeout,baseURL} from "./config.js";
import history from './history';
axios.defaults.timeout = timeout;
axios.defaults.baseURL = baseURL;
axios.interceptors.request.use(
    config => {
        if (fakeAuth.authenticate()) {
            config.headers.Authorization = `Bearer ${sessionStorage.getItem('loginToken')}`;
        }
        return config;
    },
    error => {
        return Promise.reject(error);
    }
);
axios.interceptors.response.use(
    response => {
        return response;
    },
    error => {
        if (error.response) {
            switch (error.response.status) {
                case 401:
                    fakeAuth.signout();
                    history.push('/login');
                    break;
                default:
            }
            const message = error.response.data.message ?error.response.data.message :"服务器异常";
            Message.error(message);
        }
        return Promise.reject(error);
    }
);
2 回复

可以通过事件吧,在最外面的那个如 App.js 或 Default.js里,监听事件处理函数。 // 大意 event.on(‘funName’,(options)=>{ if(options.code === 401){ // to do } })

然后别的地方,如果出现在问题,通知监听方法。 event.emit(’‘funName’,{code:401});

希望能帮到你。

@xiaotuni 好的,谢谢

回到顶部