这是我的代码,我尝试基于保存在localStorage中的令牌呈现我的屏幕容器div,我使用useState保存我的令牌,但当您注销或登录时需要刷新,我不知道如何在此处使用Effect基于localStorage重新呈现。我希望每当用户登录或注销时呈现我的应用程序组件。
function App() {
const [isloggedIn, setIsLoggedIn] = useState(localStorage.getItem("token"));
return (
<BrowserRouter>
<Routes>
<Route
path="/login"
element={<Login />}
/>
</Routes>
{isloggedIn && <div className="screens-container">
<Sidebar />}
<div className="screens-section-container">
<Navbar />
<Routes>
<Route element={<PrivateRoutes />}>
<Route
element={<Home />}
path="/"
exact
/>
</Route>
</Routes>
</div>
</div>}
</BrowserRouter>
);
}
1条答案
按热度按时间6ie5vjzr1#
isLoggedIn
状态不会重新呈现,但仅在页面初始呈现时,它将查找token
localStorage状态。您需要更改状态本身,推荐的方法如下:
这样,在页面第一次呈现时,
useEffect
钩子将在组件挂载上运行,它将检查localStoragetoken
状态并更改isLoggedIn
状态,稍后如果我们从localStorage中删除token
,isLoggedIn
状态将相应更改。注
在真实的世界的项目中,我们从来不这样处理身份验证,强烈推荐使用Redux和React Context这样的状态管理系统。