We can use useNavigate from React Router v6 inside Axios interceptors by creating a custom hook or using a wrapper function. Since React hooks like useNavigate can only be used inside components or hooks, we need a workaround to access it inside an Axios interceptor. By creating a Navigation Helper, we can store the navigate function and use it inside Axios interceptors efficiently.
We can create a separate module to manage navigation outside of React components.
Create a file (navigateHelper.js) to store the navigate function:
// navigateHelper.js
let navigateFunction;
export const setNavigate = (navigate) => {
navigateFunction = navigate;
};
export const navigateTo = (path) => {
if (navigateFunction) {
navigateFunction(path);
}
};
Use this helper in our Axios interceptor:
import axios from "axios";
import { navigateTo } from "./navigateHelper";
export const HTTP = axios.create({
baseURL: "http://URL.ru/",
headers: {
"content-type": "application/json",
},
});
HTTP.interceptors.response.use(
response => response,
error => {
if (error.response?.status === 401) {
navigateTo("/login");
}
return Promise.reject(error);
}
);
Set up the navigate function inside our App.js:
import { BrowserRouter as Router, Routes, Route, useNavigate } from "react-router-dom";
import { setNavigate } from "./navigateHelper";
import Home from "./Home";
import Login from "./Login";
const AppWrapper = () => {
const navigate = useNavigate();
setNavigate(navigate); // Set navigate function globally
return (
} />
} />
);
};
const App = () => (
);
export default App;
Work with our skilled React developers to accelerate your project and boost its performance.
Hire Reactjs Developers