首页 > 解决方案 > 仅在窗口关闭而不是页面刷新时发送“removeUser”请求

问题描述

我正在使用socket.io/ReactJS. 我面临一个问题,其中我需要NodeJS/ExpressJS在浏览器窗口关闭而不是页面刷新时从后端()中删除特定用户(字符串值 - 只是一个用户名)。当我使用redux-persist(会话存储)时,我想在刷新窗口时保留用户状态,但是当用户关闭浏览器窗口时,用户将从后端删除,显然也从会话存储中删除。

在我的 App.js 文件中,我有以下代码来注册事件:

  removeUserBeforeUnload = () => {
    if (window.performance.navigation.type !== 1)
      // The socket request which removes the username from the backend
      socket.emit("removeUser", this.props.currentUser);
  };

  setupBeforeUnloadListener = () => {
    window.addEventListener("beforeunload", ev => {
      ev.preventDefault();
      return this.removeUserBeforeUnload();
    });
  };

  componentDidMount() {
    // Registering event
    this.setupBeforeUnloadListener();
  }

我尝试使用 window.performance.navigation.type 但这似乎不起作用。谢谢你的帮助。

标签: reactjssessionreduxsocket.ioredux-persist

解决方案


推荐阅读