react 请求拦截中如何进行路由跳转
时间: 2024-04-30 21:19:03 浏览: 248
在 React 请求拦截中进行路由跳转,可以通过以下步骤实现:
1. 在请求拦截器中,判断请求返回的状态码,如果是需要登录才能访问的接口,就跳转到登录页面。
2. 在跳转登录页面前,先记录当前页面的路由路径。
3. 在登录页面完成登录后,获取之前记录的路由路径,并进行路由跳转。
以下是一个示例代码:
```javascript
import React from 'react';
import { Route, Redirect } from 'react-router-dom';
import axios from 'axios';
const PrivateRoute = ({ component: Component, ...rest }) => {
// 拦截请求
axios.interceptors.response.use(
response => {
return response;
},
error => {
if (error.response.status === 401) {
// 记录当前路由路径
sessionStorage.setItem('redirectPath', window.location.pathname);
// 跳转到登录页面
window.location.href = '/login';
}
return Promise.reject(error);
}
);
return (
<Route
{...rest}
render={props =>
// 判断用户是否登录,已登录则返回组件,否则重定向到登录页面
sessionStorage.getItem('token') ? (
<Component {...props} />
) : (
<Redirect
to={{
pathname: '/login',
state: { from: props.location }
}}
/>
)
}
/>
);
};
export default PrivateRoute;
```
在以上示例中,`PrivateRoute` 组件用于保护需要登录才能访问的页面。在拦截器中,如果返回的状态码为 401,就会跳转到登录页面,并记录当前页面的路由路径。在登录成功后,可以通过 `sessionStorage.getItem('redirectPath')` 获取之前记录的路由路径,并进行路由跳转。
阅读全文