当前位置: 首页 > 知识库问答 >
问题:

重新加载页面时还原存储更改

晏经武
2023-03-14

我正在使用react Redux实现两种不同类型用户登录。这是我的登录方法:

export const login = (credentials) => (dispatch) =>
    api.user.login(credentials).then(user => {
      localStorage.userJWT = user.token;
      localStorage.userEmail = user.email;
      localStorage.userId = user.id;
      localStorage.surname = user.surname;
      localStorage.type = user.type;
      dispatch(userLoggedIn(user));
});
  1. 对于第一种类型的用户,我从后端返回:令牌、电子邮件、id、姓氏。
  2. 对于第二种类型的用户,我从后端返回:token、email、id、type。

我做了一些第二类用户无法访问的安全路由。因此,如果返回变量surname,我将为该用户定义特定的路由。

如果返回typehtml" target="_blank">变量,它将正确显示链接和redux存储中的所有内容。但是,如果我重新加载页面,那么它会自动将变量type更改为undefined surname

这就是我试图保存redux状态存储的地方,即使我重新加载页面。const store=createStore(rootReducer,composeWithDevTools(applyMiddleware(thunk)));

 if(localStorage.userJWT && localStorage.userEmail && localStorage.userId && localStorage.type){
   const user = { token: localStorage.userJWT, email: localStorage.userEmail, id: localStorage.userId, type: localStorage.type};
   store.dispatch(userLoggedIn(user));
 }
 if(localStorage.userJWT && localStorage.userEmail && localStorage.userId && localStorage.surname){
   const user = { token: localStorage.userJWT, email: localStorage.userEmail, id: localStorage.userId, surname: localStorage.surname};
   store.dispatch(userLoggedIn(user));
 }

你能告诉我为什么它不是按照我的if声明。提前谢谢你。

共有1个答案

颛孙兴旺
2023-03-14

重新加载时重新初始化还原存储/状态。您可以将身份验证信息保存在本地存储中,然后将其取出用作初始状态。这样,即使在重新加载时,您的Redux状态也将始终拥有该身份验证信息。

function reducer (state = initState(), action) {
    return state
}

function initState () {
    return { 
        token: localStorage.userJWT, 
        email: localStorage.userEmail, 
        id: localStorage.userId, 
        surname: localStorage.surname
    }
}

或者,如果您希望在重新加载时保持整个Redux状态,您可以尝试实现一些这样做的包,例如Redux-Persist。

 类似资料:
  • 我正在使用React Service Worker脱机插件为网站创建一个具有持久缓存的Service Worker。 我想告诉用户什么时候cach中存储了新版本,并建议刷新页面,但我不知道如何引用服务工作以及应该听什么事件(服务工作由npm“离线插件”自动创建)。 今天的标准流量: 网站管理员发布网站(V1) 用户访问网站 他查看网站(V1),而服务人员将页面存储在持久缓存中 网站管理员发布新版本

  • 问题内容: 我从数据库获取数据并将其显示在div中…我要做的是单击链接时应更改div的内容 一种选择是通过URL将参数传递给自身并重新加载页面… 我需要这样做而 无需重新加载\刷新 … 目的是当我单击任何链接时,div和php变量的内容无需刷新即可更新....这样 用户可以看到新数据 ,然后如果执行某些查询,它将在新变量上 ps我知道它将需要一些AJAX,但我不知道AJAX ..所以请以我可以学习

  • 我想重新加载页面。我该怎么做?

  • 演示视频:https://www.youtube.com/watch?v=UBfnvx6jC_A 我学习了Udacity的离线Web应用程序课程,以便让我的应用程序离线工作。这是我的密码: 主要的js 服务人员。js 当我处于一个安装了服务人员并处于活动状态,并且缓存了我所有的东西的状态时,就会出现问题。当我打开开发工具并在Chrome中签入“重新加载时更新”时,如果我重新加载: 页面看起来相同,

  • 问题内容: 我将如何更新每两秒钟在服务器上更新一次的映像,而无需用户按下刷新按钮,我的第一个猜测是ajax,但我之前从未真正使用过它。有人能指出我正确的方向吗? 编辑:忘记提及图像是由perl脚本生成的.gif-尝试通过url抓取它返回脚本 问题答案: 您的Perl脚本似乎有问题。尝试通过URL访问图像应该仍然返回图像。它应该返回二进制数据而不是脚本。您还应该将响应的Content- type标头

  • 问题内容: 我们正在发出多个ajax请求,以“保存” Web应用程序中的数据,然后重新加载页面。我们遇到了这样一种情况:(由于请求是异步发出的)在ajax调用完成时或之前重新加载页面。一种简单的解决方案是使用“ async”:false选项启用ajax调用,从而强制进行同步调用。这似乎可行,但是在执行任何调用之前运行的对话框代码会延迟运行。 任何意见是极大的赞赏! 还应注意,在重新加载之前放置al