关闭选项卡时,不会调用useEffect清洁功能

时间:2020-04-19 18:56:01

标签: javascript reactjs

我有这个useEffect,仅用于清洁:

  useEffect(() => {
    return function cleanup() {
      if (!room || !currentPortal) return;
      leavePortal(
        room,
        currentPortal,
        currentUserProfile && currentUserProfile.uid
          ? currentUserProfile.uid
          : uniqueId
      );
      detachListener();
    };
  }, [isFirstLoad, currentUserProfile, currentPortal]);

我可以来回移动,但效果很好,但是如果关闭了选项卡,则不会执行任何操作。那是useEffect的工作方式吗?它不会检测到标签关闭吗?

1 个答案:

答案 0 :(得分:8)

useEffect默认不会检测到选项卡关闭。

但是您可以自己实现:

useEffect(() => {
  const cleanup = () => {
    // do your cleanup
  }

  window.addEventListener('beforeunload', cleanup);

  return () => {
    window.removeEventListener('beforeunload', cleanup);
  }
}, []);