【发布时间】:2021-04-14 17:00:45
【问题描述】:
我是 React 的新手,正在关注 Udemy 上的一个视频系列(Brad Schiff 为我们其他人准备的 React)。作者为用户登录等提供了后台系统。 当用户登录时,后端服务器发送 3 个值以响应成功登录:登录令牌、用户名和头像 url(来自 gravatar.com 的虚拟图像)。然后将这些值存储在本地存储中,从那里它们可以显示在 UI 上:
const response = await axios.post("http://localhost:8080/login", {username, password});
if (response.data) {
// if response contains token, set login flag to true
props.loginFlagHandler(true);
// save user token, username, avatar in localstorage
localStorage.setItem("username", response.data.username);
localStorage.setItem("loginToken", response.data.token);
localStorage.setItem("avatar", response.data.avatar); }
现在,当我登录并更新 UI 时,从服务器接收到的值已成功存储在浏览器的本地存储中,但它们没有反映在 UI 上。头像图片未加载,应显示用户名的欢迎消息未按预期工作(请参见下面的第一张图片)。欢迎消息应为“您好 用户名>,您的提要为空”
但是,一旦我点击刷新,头像图像和用户名都会按原样显示在相关位置。 (参考第二张图片)。
在这两种情况下,我指的是 localStorage 变量,如下所示:
<img className="small-header-avatar" src={localStorage.getItem("avatar")} />
还有:
<h2 className="text-center">
Hello <strong>{localStorage.getItem("username")}</strong>, your feed is empty.
</h2>
我认为这应该是我在这里想念的菜鸟。不过,提前致谢:
【问题讨论】:
-
我的猜测是 - 组件不会自行刷新,因为它没有理由这样做。本地存储中的数据已更改,但您的组件不知道该更改。手动刷新会强制组件重新渲染自己。
-
你能提供你的react组件的代码吗?
-
http请求成功后页面是否刷新并重定向到auth路由?
-
如果你的应用使用像 React Router 这样的路由库,组件从 localstorage 读取数据的一种方法是延迟加载,因为组件渲染在 localStorage 保存数据之前首先出现。
标签: reactjs local-storage