Reactjs 在redux createState中读取会话存储
我想将sessionStorage添加到我的Next.js/React/Redux项目中,以便在刷新页面时避免状态丢失。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 = () => ({
我使用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我知道这有点奇怪,但几天后,您可以添加自己的答案并将其标记为已接受的答案。这样,其他人在这篇文章上绊倒会更快地找到答案。