前言:在写项目时需要在非组件的js文件里 进行路由跳转,比如axios里请求响应拦截后做路由跳转, 但是又不能获取到this.props.history, 那怎么才能获取到history对象呢?
1.创建一个 utils/history.js
import { createBrowserHistory } from 'history';
export default createBrowserHistory();
2.主入口index.js
import ReactDOM from 'react-dom';
import React from "react";
import { Router, Switch } from "react-router-dom";
import { renderRoutes } from '@/router/router-config';
import routes from './routes'
import history from '@/utils/history' //将配置好的history.js引入
const RouterView =
<Router history={history}> //这里一定要记得配置
<Switch>
{renderRoutes(routes)} //你自己的路由列表
</Switch>
</Router>
ReactDOM.render(RouterView, document.getElementById("root"));
3.axios.js
import history from '@/utils/history'
import axios from 'axios';
// 创建axios实例
const $http = axios.create();
// response
$http.interceptors.response.use(response => {
if(未登录) { // 伪代码,响应拦截未登录状态时,就跳转登录
history.push(`/login`);
}
})
本文介绍了如何在react项目中,特别是非组件的js文件(如axios拦截器)中进行路由跳转。通过创建一个`utils/history.js`文件并配置,然后在主入口`index.js`引入,确保能在全局范围内访问`history`对象,从而实现非组件内部的路由操作。

1万+

被折叠的 条评论
为什么被折叠?



