热装时是否执行useEffect清洁功能?

时间:2020-05-03 14:47:08

标签: javascript reactjs react-hooks

我有一个组件来统计页面的访问者(当前访问者,而不是时间)。如果用户已登录,则将其uid添加到计数数组。如果用户未登录,我将为当前会话生成并保留的UUID添加到a​​rrey中。当用户登录或注销时,我会在两者之间切换。

我有一个清理功能,如果阵列中有uidUUID的剩余部分,则可以清理。它应该在关闭窗口或卸载组件时执行:

  useEffect(() => {
    listenToMultiverse(entityID, setMultiverse, setMultiverseArray, () => {
      newPortal(
        "Home",
        currentPortal,
        entityID,
        currentUserProfile && currentUserProfile.uid
          ? currentUserProfile.uid
          : uniqueId,
        (portalObj) => {
          setPortal("");
          setCurrentPortal(portalObj);
        }
      );
    });
    const myCleanup = () => {
      leavePortal(
        entityID,
        currentPortal,
        currentUserProfile && currentUserProfile.uid
          ? [currentUserProfile.uid, uniqueId]
          : [uniqueId]
      );
      detachListener();
    };

    window.addEventListener("beforeunload", myCleanup);

    return function cleanup() {
      if (!room || !currentPortal) return;
      myCleanup();
      window.removeEventListener("beforeunload", cleanup);
    };
  }, [room, currentUserProfile, currentPortal, uniqueId]);

但是,经过一些使用,我看到一些ID仅保留在数组中,并且没有被删除。当我进行测试时,它可以正常工作,但我只是注意到它不是在一段时间之后。很难解决问题。

0 个答案:

没有答案