首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Access sessionStorage at componentDidMount

Access sessionStorage at componentDidMount
EN

Stack Overflow用户
提问于 2017-09-01 09:14:17
回答 1查看 1.5K关注 0票数 0

我假设sessionStorage是在组件被挂载之后实例化的,人们可以通过componentDidMount调用访问它。

我使用这个剧本通过不同的选项卡保存我的sessionStorage

代码语言:javascript
复制
(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方法访问我的componentDidMount

代码语言:javascript
复制
export default class Dashboard extends React.Component {
  componentDidMount() {
    console.log(window.sessionStorage.getItem('someData'));
  }

上述功能在相同的选项卡上正常工作。

但是,当我打开一个新的选项卡时,在控制台上我会从null获得sessionStorage

如果刷新新选项卡,就会得到正确的someData值。

编辑:

为了满足我的需求,我确实改变了我的实现,以使用cookie,但是我仍然对这个问题和任何潜在的解决方案感兴趣。

EN

回答 1

Stack Overflow用户

发布于 2017-09-01 09:27:50

它正在按预期工作。

会话存储可用于当前会话。当您打开一个新选项卡时,您将创建一个新会话,这就是初始数据为null的原因。

使用localStorage在选项卡中持久化数据。

我不知道您的用例,但从切换sessionStorage和localStorage开始。

把正常的东西保存在sessionStorage上。坚持localStorage

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45996854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档