我有一个组件来统计页面的访问者(当前访问者,而不是时间)。如果用户已登录,则将其uid
添加到计数数组。如果用户未登录,我将为当前会话生成并保留的UUID
添加到arrey中。当用户登录或注销时,我会在两者之间切换。
我有一个清理功能,如果阵列中有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]);
但是,经过一些使用,我看到一些ID仅保留在数组中,并且没有被删除。当我进行测试时,它可以正常工作,但我只是注意到它不是在一段时间之后。很难解决问题。