javascript - 从 axios 实例拦截器导航到其他屏幕
问题描述
我在 React 项目中使用 Axios,并为我想创建 Axios 实例并使用拦截器的错误编写一些通用代码。
以下是我的 React Routes 代码
import React, { Component } from "react";
import { Route, Switch } from "react-router-dom";
import Home from "./scenes/Home";
import { ProtectedRoute } from "./_hoc/ProtectedRoute";
import Admin from "./scenes/Admin";
import Login from "./components/Auth/Login";
export default class Routes extends Component<any, any> {
render() {
return (
<div>
<Switch>
<Route exact path="/" component={Home} />
<Route exact path="/login" component={Login} />
<ProtectedRoute exact path="/admin" component={Admin} />
</Switch>
</div>
);
}
}
以下是我的 Axios 实例的代码
import axios from "axios";
const axiosInstance = axios.create({
baseURL: `http://localhost:55266/api/`
});
axiosInstance.interceptors.request.use(request => {
if (request.url != "/Login/Authenticate") {
//TO DO
//request.headers["Authorization"] = "Bearer";
}
return request;
});
axiosInstance.interceptors.response.use(
response => {
if (
response.request.responseURL ==
response.config.baseURL + "Login/Authenticate"
) {
localStorage.setItem("TAGAuthToken", response.data.data.token);
//I DON'T WANT THIS PAGE TO GET RELOADED.
window.location.href = "/Admin";
}
return response;
},
error => {
return Promise.reject({ ...error });
}
);
export default axiosInstance;
我不想通过使用 window.location 重新加载页面,但想通过历史浏览。我无法获得如何实现这一目标的线索。
我在各种教程中看到的方式是他们说使用路由器而不是交换机并使用历史 v4 库,然后我们可以在任何地方使用历史,但我想坚持使用交换机而不是路由器。
期待有价值的回应。
注意:我已经检查了使用反应路由器以编程方式导航的帖子,但这并不能回答我的问题。我想从 AxiosInstance 文件中导航。它可以通过 History NPM 包实现,但需要使用路由器,但根据我的要求,我需要使用 Switch
解决方案
推荐阅读
- java - 写入属性文件
- javascript - 选择一个文本,把它加粗,然后保存粗体标签的位置,以便以后围绕这些相同的文本
- java - 使用 jason.simple 将用户定义的数据类型转换为 JSON 对象类型
- python - 我可以用不同的消息向不同的收件人发送不同的邮件吗
- excel - Delphi/Excel - 工作表未实例化
- python-3.x - URL 解码和反序列化失败
- ios - 是否可以获得 safari 或其他浏览器当前用于访问网站的当前 URL?
- php - 如何获取主机名以从外部连接而不是“本地主机”
- java - 将图像从表单加载到 RecyclerView
- c++ - 将一个 rapidjson 分配器拥有的内存移动到另一个分配器