Выполняется ли функция очистки useEffect при горячей перезагрузке? - PullRequest
0 голосов
/ 03 мая 2020

У меня есть компонент, который подсчитывает посетителей на странице (текущие посетители, не по времени). Если пользователь залогинен, я добавляю в подсчет-массив их uid. Если пользователь не вошел в систему, я добавляю к массиву UUID, который я генерирую, и сохраняю для текущего сеанса. Когда пользователь входит в систему или выходит из нее, я переключаюсь между двумя.

У меня есть функция очистки, которая очищает все остатки uid и UUID, если они были в массиве. Он должен выполняться при закрытии окна или при размонтировании компонента:

  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]);

Тем не менее, после некоторого использования я вижу, что некоторые идентификаторы просто остаются в массиве и не удаляются. Когда я делаю свои тесты, это работает просто отлично, но я просто замечаю, что через некоторое время это не так. Трудно воссоздать проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...