为什么在应用程序关闭时componentWillUnmount不在React根组件中触发

时间:2018-09-19 00:50:58

标签: javascript reactjs cookies components

如果存在某个Cookie(使用通用Cookie),那么当用户退出应用程序时,我需要从浏览器中删除Cookie。

我拥有的代码:

componentWillUnmount(){
    const cookies = new Cookies();
    if(cookies.get("remember")==0){
      cookies.remove("userName");
      cookies.remove("password")
    }

  }

可以在其他组件上运行,但是我只需要在根目录上启动它即可,直到用户关闭应用。

为什么在应用程序退出时componentWillUnmount不会启动?

1 个答案:

答案 0 :(得分:4)

当关闭浏览器窗口时,不应调用

compomentWillUnmountbeforeunload事件允许执行同步操作:

constructor() {
  window.addEventListener('beforeunload', this.onUnmount, false);
}

onUnmount = () => {
  // clear cookies
}

compomentWillUnmount() {
  window.removeEventListener('beforeunload', this.onUnmount, false);
  this.onUnmount();
}

beforeunload在某些浏览器中可能无法使用,并且也不可靠。

这是XY问题。 Cookie过期之前已解决了此问题,cookie可能是短期的,但在打开浏览器窗口时会定期更新。

由于存在localStoragesessionStorage,因此通常认为cookie通常已经过时。诸如凭据之类的敏感数据可以存储在sessionStorage中。它会在浏览器退出时自动清除。