Я пытаюсь использовать перенаправления (auth), как в качестве примеров в реакции-роутере-dom с auth axios и использовать состояние, эффект реагирующих хуков. Но что-то пошло не так.
Результат в инструментах консоли dev, когда я запрашиваю / admin:
Предупреждение. Невозможно выполнить обновление состояния React для неустановленного компонента. Это не работает, но это указывает на утечку памяти в вашем приложении. Для исправления отмените все подписки и асинхронные задачи в функции очистки useEffect.
Пожалуйста, дайте мне немного подробностей, спасибо.
import React, { useState, useEffect } from "react";
import { Switch, Route, Redirect } from "react-router-dom";
import Admin from "./layouts/Admin";
import Login from "./layouts/Login";
import Swal from "sweetalert2";
import axios from "axios";
function App() {
return (
<Switch>
<PrivateRoute path="/admin" component={Admin} />
<Route path="/login" component={Login} />
<Redirect from="/" to="/admin" />
</Switch>
);
}
function PrivateRoute({ component: Component, ...rest }) {
const [login, setLogin] = useState(false);
useEffect(() => {
async function fetchLogin() {
try {
let isLogin = await axios.get("/api/user/isLogin", {
headers: { Authorization: sessionStorage.getItem("token") }
});
if (isLogin.status == 200) {
setLogin(true);
}
} catch (err) {
console.log(err);
}
}
fetchLogin();
},[]);
return (
<Route
{...rest}
render={props =>
login ? (
<Component {...props} />
) : (
<>
{
!Swal.fire({
title: "Login required!",
text: "You have to login!",
type: "error",
confirmButtonText: "OK"
})
}
<Redirect
to={{
pathname: "/login",
state: { from: props.location }
}}
/>
</>
)
}
/>
);
}
export default App;