【发布时间】:2017-09-01 09:14:17
【问题描述】:
我假设sessionStorage 在组件安装后被实例化,并且可以通过componentDidMount 调用访问它。
我正在使用this script 来通过不同的标签保存我的sessionStorage:
(function() {
if (!sessionStorage.length) {
// Ask other tabs for session storage
localStorage.setItem('getSessionStorage', Date.now());
};
window.addEventListener('storage', function(event) {
if (event.key == 'getSessionStorage') {
// Some tab asked for the sessionStorage -> send it
localStorage.setItem('sessionStorage', JSON.stringify(sessionStorage));
localStorage.removeItem('sessionStorage');
} else if (event.key == 'sessionStorage' && !sessionStorage.length) {
// sessionStorage is empty -> fill it
let data = JSON.parse(event.newValue);
for (key in data) {
sessionStorage.setItem(key, data[key]);
}
showSessionStorage();
}
});
window.onbeforeunload = function() {
//sessionStorage.clear();
};
})();
这似乎按预期工作。
我正在尝试通过以下(精简)组件的componentDidMount 方法访问我的sessionStorage:
export default class Dashboard extends React.Component {
componentDidMount() {
console.log(window.sessionStorage.getItem('someData'));
}
以上内容在同一标签上按预期工作。
当我打开一个新标签时,在控制台上我从sessionStorage 得到null。
如果我刷新新标签,我会打印出正确的 someData 值。
编辑:
我确实更改了我的实现以使用 cookie 来满足我的需求,但我仍然对这个问题和任何潜在的解决方案感兴趣。
【问题讨论】:
标签: javascript reactjs session-storage