我有一个创建-反应-应用程序,我将一些状态存储在sessionStorage中,以便在用户会话期间保持一些redux状态。
在桌面浏览器中一切正常,但是在Safari或Chrome内部的移动设备上进行调试时,刷新时不会检索状态。这会导致错误,因为状态不再存在。
知道为什么这只会发生在移动浏览器上吗?
这就是我使用 sessionStorage 保存和检索状态的方式:
export function saveToLocalStorage(state: AppState) {
const hasUserProfileId =
state.system.profile.id && state.system.profile.id !== '';
try {
if (hasUserProfileId) {
const serializedState = JSON.stringify(state);
sessionStorage.setItem('state', serializedState);
}
} catch (error) {
console.log('Error saving state to local storage');
}
}
function loadFromLocalStorage() {
console.log('loadFromLocalStorage - 1');
try {
const serializedState = sessionStorage.getItem('state');
if (serializedState === null) {
return undefined;
}
return JSON.parse(serializedState);
} catch (error) {
console.log('Error loading state from local storage');
return undefined;
}
}
执行const serializedState = sessionStorage.getItem('state');
时为 null,因此返回undefined
if (serializedState === null) {
return undefined;
}
我正在使用beforeunload
事件侦听器来保存刷新时的状态。移动浏览器不支持此事件处理程序。用unload
替换它有效。
window.addEventListener('unload', () => {
saveToLocalStorage(store.getState());
});