【发布时间】:2021-04-16 10:37:09
【问题描述】:
我正在开发一个 MERNG 应用程序,但在注销用户时遇到问题。
所以,我有一条路线,它将带您到 url 具有 /profile/userId 的页面,用户 ID 由 localStorage 给出,因为我从那里获取该值,并且,当我注销时,我删除来自 localStorage 的令牌,因此,如果没有值,它应该带您登录页面。
现在,问题是,当我登录并进入 /profile/userId 页面时,我用 f5 刷新页面,如果我注销,它不会让我这样做,重定向不会工作,它只有在我不刷新页面时才有效,这对我的应用程序来说是一个大问题,而且它实际上很奇怪。
也许是我的代码有问题,我不太清楚如何使用重定向,所以如果你能帮我解决这个问题,你就是最棒的!
这就是代码
带有重定向的路由
import React from "react";
import "./App.css";
import {
BrowserRouter as Router,
Switch,
Route,
Redirect
} from "react-router-dom";
import Auth from "./website/Auth";
import SocialMedia from "./website/SocialMedia";
import SingleUser from "./website/SingleUser";
function App() {
const logIn = JSON.parse(localStorage.getItem("token"));
return (
<Router>
<Switch>
<Route exact path="/">
{logIn ? <Redirect to={`/profile/${logIn.data.id}`} /> : <Auth />}
</Route>
<Route exact path="/socialmedia" component={SocialMedia} />
<Route exact path="/profile/:id" component={SingleUser} />
</Switch>
</Router>
);
}
export default App;
退出
import React from "react";
import { useHistory } from "react-router-dom";
import { useDispatch } from "react-redux";
const SingleUser = () => {
const history = useHistory();
const dispatch = useDispatch();
const userData = JSON.parse(localStorage.getItem("token"));
const logout = () => {
dispatch({ type: "LOGOUT" });
if (!userData) {
history.push("/");
}
};
return <div onClick={logout}>Single User</div>;
};
export default SingleUser;
我在 localStorage 中存储令牌并通过注销操作将其删除的减速器
const reducer = (state = { authData: null }, action) => {
switch (action.type) {
case "LOGIN":
localStorage.setItem("token", JSON.stringify({ data: action.payload }));
return {
...state,
authData: action.payload
};
case "LOGOUT":
localStorage.removeItem("token");
return {
...state,
authData: null
};
default:
return state;
}
};
export default reducer;
【问题讨论】:
标签: javascript reactjs