重新加载页面时 Redux 存储发生变化

2023-12-07

我正在使用 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. 对于第一类用户,我从后端返回:token、email、id、surname。
  2. 对于第二种类型的用户,我从后端返回:token、email、id、type。

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

If type返回变量,它也正确显示链接和 redux 存储中的所有内容。但是,如果我重新加载页面,它会自动更改变量type into undefined surname.

这是我尝试将 redux 状态保存在存储中的地方,即使我重新加载页面也是如此。 常量存储 = createStore( 根减速器, composeWithDevTools(应用中间件(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 语句吗? 先感谢您。


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

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

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

或者,如果你想在重新加载时保持整个 Redux 状态,你可以尝试实现一些可以做到这一点的包,例如还原-持久化.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重新加载页面时 Redux 存储发生变化 的相关文章

  • React Datepicker(无法获取输入值)

    我是反应新手 我需要使用反应日期选择器 https github com Hacker0x01 react datepicker 当我更改日期时 我想获取输入的值 如果我点击 2017 年 10 月 20 日 我想将 2017 年 10 月
  • React Router v4 NavLink 活动路由

    我正在尝试使用 v3 移植我的项目react router到现在所谓的 v4react router dom 现在 当我有一个 MenuBar 组件时 问题就出现了 该组件与路由逻辑完全分开 如您所期望的 因为无论当前路径是什么 它都会显示
  • Next.js 使用 getServerSideProps 如何将属性从页面传递到组件?

    我正在尝试获取coingecko api访问比特币的实时价格 我正在尝试将 getServerSideProps 的返回道具传递给我的
  • 如何将 Chosen 合并到我的 React 项目中?

    我想使用 jquery 插件Chosen https harvesthq github io chosen 在我的项目中 我安装了 jQuery 并通过 npm 选择 npm i jquery chosen js S 这两个库现在都位于我的
  • 设置相机角度react-三纤

    如何使用将相机指向场景中的某个方向react three fiber canvas 元素有一个相机道具 但它不提供设置角度的方法
  • Nest.js Google Login(passport.js) 与 SPA 前端(React)

    在我的全栈项目 Nest js React 中 我使用护照谷歌实现了谷歌登录 如下所示 import Controller Get Req UseGuards from nestjs common import AppService fro
  • React:如何组合Material-UI中标记的多种样式

    我有两种风格 一件事包含在特定组件中 另一件事包含在全局组件中 例如 假设我们有以下树 index tsx App tsx globalConstants ts 在 globalConstants ts 中 import Theme mak
  • React Redux 混乱

    事实证明 Redux 对我来说有点难以理解 我想知道是否有人可以帮助我指出正确的方向 以获取我想要的结果 只是一个预警 我正在使用 ES6 语法 好的 我已经设置了一些沙箱来测试 redux 的工作原理 这是我正在使用的当前文件设置 act
  • React 中大括号的使用

    我正在尝试学习 React 我在使用花括号时遇到问题 JSX 和 JS 之间使用大括号的区别 在下面的代码中 大括号 1 表示 现在是 JS 为什么有花括号 2 它已经在花括号区域内了吗 var React require react va
  • useSelector 常量在调度后不更新

    这里有一个代码沙盒 https codesandbox io s competent moon 9ehen getIDs 更新cells 然后需要initializeCells 但是 此更改在分派操作后不会反映出来 尽管如此 我还是可以看到
  • 为什么需要在父子组件中多次导入React?

    如果您有已导入的父组件文件React 为什么它的任何渲染的子文件也需要导入 React 这是否只是一种安全措施 以防这些子项被渲染到尚未导入 React 的其他地方 In nodejs每个文件都是一个模块 有自己的变量范围 当您将变量导入文
  • 带 webusb 的指纹扫描仪

    可以将 USB 指纹扫描仪与 webusb 连接 配对 https wicg github io webusb https wicg github io webusb 我有数字角色 U are U 4500 想要使用react js 连接到
  • Chrome 上的 BetterJsPop 错误是什么?

    我在 Chrome 上使用 React js 应用程序时遇到此错误 但在 Mozilla 上它运行得很好 有谁知道这意味着什么或者这个错误指的是什么 VM1407 20 Uncaught TypeError Cannot redefine
  • 使用 webpack 动态提供图像

    我有一个关于 webpack 和服务图像的问题 我有一个 webpack 配置 它构建了一个 React webapp 并且还提供来自特定文件夹的 jpg 文件 但是 如果我从我的网络应用程序下载新图像并将其添加到此文件夹中 会发生什么情况
  • 使用 React Hooks 输入千位分隔符

    我想使用 React Hooks 在输入上添加千位分隔符 但我不知道如何操作 到目前为止我已经尝试过下面的代码但不起作用 您能否指出可能出现的问题以及我该如何实施 谢谢 const MainComponent gt const value
  • CSS 100% 高度在 React 应用程序中不起作用

    我试图在我的 React 应用程序中使用 Flexbox 创建一个简单的两列网页 占据整个宽度和高度 我可以让它单独使用 HTML 和 CSS 但不能在 React 应用程序中使用 到目前为止我有 root overflow x hidde
  • 必须返回有效的 React 元素或 null -- Reactjs 错误

    拜托 我遇到了一些对我来说很难修复的错误 我下面有一个简单的反应组件 import React from react const ForumPostComponent topics gt const forums topics return
  • 使用异步数据初始化组件

    我想弄清楚如何以及在哪里在react redux thunk中为我的选择框加载数据 即在我的操作上调用调度 我不确定它是否应该放入我的应用程序容器的构造函数中 或者我应该将其加载到我的组件中 在我的示例中 MyDropdown 我的主要应用
  • 如何在 React 中使用原生 Node.js 插件

    我有一个反应项目 我想在其中使用this https github com svenpaulsen node ts3sdk client原生 Node js 插件 它是 C SDK 的包装器 我过去曾在 Electron 项目中成功使用过此
  • Cookie 未存储在浏览器中

    与 一起工作Next js and Django Rest Framework 我正在使用 JWT 对用户进行身份验证 首先 当用户成功登录页面时 会将 cookie 包含 JWT 令牌 发送到浏览器 当用户尝试访问特定页面时 此 cook

随机推荐