在浏览器关闭时为 React 明确清除本地存储

Posted

技术标签:

【中文标题】在浏览器关闭时为 React 明确清除本地存储【英文标题】:Explicitly clear localstorage on browser close for React 【发布时间】:2020-06-28 17:35:28 【问题描述】:

我有一个带有 React 前端和 Java 后端的应用程序。我正在使用 JWT 并将令牌保存在本地存储中。关闭整个浏览器时如何清除本地存储?为了反应。 我的菜单组件在这里(我根据令牌的存在进行更改。isUserLoggedIn 检查是否有令牌。

class MenuComponent extends Component 
  componentWillUnmount() 
    localStorage.clear();
  
  render() 
    const isUserLoggedIn = AuthenticationService.isUserLoggedIn();
    return (
      <Navbar collapseOnSelect expand='lg' bg='dark' variant='dark'>
        <Navbar.Brand href=''>MAP-Runner</Navbar.Brand>
        <Navbar.Toggle aria-controls='responsive-navbar-nav' />
        <Navbar.Collapse id='responsive-navbar-nav'>
          <Nav>
            !isUserLoggedIn && (
              <li>
                <Link className='nav-link' to='/login'>
                  Вход
                </Link>
              </li>
            )
            isUserLoggedIn && (
              <li>
                <Link className='nav-link' to='/calculations'>
                  Расчеты
                </Link>
                <Link
                  className='nav-link'
                  to= pathname: `/calculation-types` 
                >
                  Типы расчетов
                </Link>
                <Link className='nav-link' to= pathname: `/group-settings` >
                  Настройки кластеров
                </Link>
                <Link className='nav-link' to= pathname: `/ost-docs` >
                  Док-ты остатков
                </Link>
                <Link className='nav-link' to= pathname: `/artlists` >
                  Списки артикулов
                </Link>
                <Link className='nav-link' to= pathname: `/color-schemas` >
                  Цветовые схемы
                </Link>
                <Link
                  className='nav-link'
                  to='/logout'
                  onClick=AuthenticationService.logout
                >
                  Выход
                </Link>
              </li>
            )
          </Nav>
        </Navbar.Collapse>
      </Navbar>
    );
  


export default withRouter(MenuComponent);

【问题讨论】:

尝试在componentWillUnmount生命周期中删除它? 在每个组件中?即使我不注销并关闭整个浏览器? 【参考方案1】:

如果您确定只需要使用本地存储,那么您可以在第一次挂载应用组件时运行清除本地存储的代码:

localStorage.clear()

不过,正如 Raymond Camden 所指出的,更好的选择是使用会话存储。

【讨论】:

【参考方案2】:

您可以使用 sessionStorage 代替 localStorage。

【讨论】:

以上是关于在浏览器关闭时为 React 明确清除本地存储的主要内容,如果未能解决你的问题,请参考以下文章

关闭所有选项卡时删除/清除本地存储[重复]

我们如何从网页中清除浏览器本地存储[重复]

前端 自定义网址功能 localStorage 本地存储?

localStoragesessionStoragecookie的区别

React Hooks 有条件地渲染登录/注销 w/本地存储变量

关于localStorage储存多个数据