Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 在redux createState中读取会话存储_Reactjs_Redux_Jwt_Sessionstorage - Fatal编程技术网

Reactjs 在redux createState中读取会话存储

Reactjs 在redux createState中读取会话存储,reactjs,redux,jwt,sessionstorage,Reactjs,Redux,Jwt,Sessionstorage,我想将sessionStorage添加到我的Next.js/React/Redux项目中,以便在刷新页面时避免状态丢失。 我使用jwt是为了用我的api对客户端进行身份验证,并在登录时将jwt放在sessionStorage中可以正常工作,但我喜欢检查sessionStorage中是否已经有jwt。 我的第一个想法是将它添加到我的reducer中的createState函数中,我通常在启动时定义一个空的sessionToken const createState = () => ({

我想将sessionStorage添加到我的Next.js/React/Redux项目中,以便在刷新页面时避免状态丢失。
我使用jwt是为了用我的api对客户端进行身份验证,并在登录时将jwt放在sessionStorage中可以正常工作,但我喜欢检查sessionStorage中是否已经有jwt。
我的第一个想法是将它添加到我的reducer中的createState函数中,我通常在启动时定义一个空的sessionToken

const createState = () => ({
  // ...
  sessionToken: sessionStorage.token || "",
  // ...
})

const gui = (state = createState(), action) => {
  switch(action.type) {
  // ...
  }
}
但是我越来越 未定义会话存储

使用
sessionToken:window.sessionStorage | |“”,

结果是一个
窗口未定义
错误

好的,我想,我读过一些关于在函数中包装会话存储的内容

因此,我在另一个文件中添加了一些函数,并将它们导入到我的简化程序中,效果很好。
至少对于进口来说是这样

export const globalStorage = () => {(insNode = typeof process === 'object' && process.versions && !!process.versions.node) ? global : window}

export const setSessionStorage = (key, value) => sessionStorage.setItem(key, value)
export const getSessionStorage = (key) => sessionStorage.getItem(key)
export const delSessionStorage = (key) => sessionStorage.removeItem(key)
但是当我试图在我的减缩器中调用这些函数时

sessionToken:globalStorage()['sessionStorage']| |“”,

我得到:

(0,\u store.globalStorage)不是一个函数

此后

我第一次尝试直接在createState函数中访问sessionStorage应该可以正常工作,但实际上不行。
我错过了什么/
感谢您的帮助,

BigZ

愚蠢的我。。。会话存储在服务器呈现的应用程序中不可用。但是我可以通过components
componentDidMount(){}
函数访问它。使用sessionStorage存储jwt不是很明智,当使用关闭选项卡或浏览器时,会话将与其会话存储一起丢失。一个更好的选择是使用本地存储。谢谢,也许我考虑将会话存储在本地存储中,并减少允许客户端刷新令牌的时间,但目前我对这种行为没有意见。@BigZ我知道这有点奇怪,但几天后,您可以添加自己的答案并将其标记为已接受的答案。这样,其他人在这篇文章上绊倒会更快地找到答案。