From dccc58d133a83597ce9b0cfc50d9ae6049e85f78 Mon Sep 17 00:00:00 2001 From: qiuchengw Date: Mon, 1 Dec 2025 18:56:42 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=AD=A6=E5=91=8A=20onUnmounted=20is=20?= =?UTF-8?q?called=20when=20there=20is=20no=20active=20component=20instance?= =?UTF-8?q?=20to=20be=20associated=20with?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/TaskBar.vue | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/components/TaskBar.vue b/src/components/TaskBar.vue index 8d8a393..a0e9264 100644 --- a/src/components/TaskBar.vue +++ b/src/components/TaskBar.vue @@ -1200,23 +1200,21 @@ const handleMouseUp = () => { document.removeEventListener('mouseup', handleMouseUp) } +// ResizeObserver 引用(在组件卸载时清理) +let nameResizeObserver: ResizeObserver | null = null + onMounted(() => { nextTick(() => { reportBarPosition() // 使用 ResizeObserver 监听任务名称宽度变化 if (taskBarNameRef.value) { - const nameResizeObserver = new ResizeObserver((entries) => { + nameResizeObserver = new ResizeObserver((entries) => { for (const entry of entries) { nameTextWidth.value = entry.contentRect.width } }) nameResizeObserver.observe(taskBarNameRef.value) - - // 组件卸载时清理 - onUnmounted(() => { - nameResizeObserver.disconnect() - }) } }) @@ -1245,6 +1243,12 @@ onMounted(() => { // 清理函数 onUnmounted(() => { + // 清理 ResizeObserver + if (nameResizeObserver) { + nameResizeObserver.disconnect() + nameResizeObserver = null + } + window.removeEventListener('timeline-scale-updated', handleTimelineScaleUpdate) window.removeEventListener('timeline-force-recalculate', handleForceRecalculate) window.removeEventListener('close-all-taskbar-menus', closeContextMenu)