У меня есть компонент, который подсчитывает посетителей на странице (текущие посетители, не по времени). Если пользователь залогинен, я добавляю в подсчет-массив их 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]);
Тем не менее, после некоторого использования я вижу, что некоторые идентификаторы просто остаются в массиве и не удаляются. Когда я делаю свои тесты, это работает просто отлично, но я просто замечаю, что через некоторое время это не так. Трудно воссоздать проблему.