From cd5218535e35536dba5e6892c4ac7af41fb7656d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Thu, 24 Sep 2026 17:26:02 +0800 Subject: [PATCH] =?UTF-8?q?3D=20=E9=9D=A2=E6=9D=BF=E5=8F=82=E8=80=83?= =?UTF-8?q?=E5=9B=BE=E8=8F=9C=E5=8D=95=E7=9A=84=E8=BE=B9=E7=95=8C=20refs?= =?UTF-8?q?=20=E6=95=B0=E7=BB=84=E7=A8=B3=E5=AE=9A=E4=B8=8B=E6=9D=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - src/components/image-editor/model3d-generation/Model3dGenerationModal.tsx:boundaryRefs 用 useMemo 缓存,避免每次渲染都新建数组导致浮层 dismiss effect 反复解绑/重挂 document 监听 --- .../model3d-generation/Model3dGenerationModal.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/components/image-editor/model3d-generation/Model3dGenerationModal.tsx b/src/components/image-editor/model3d-generation/Model3dGenerationModal.tsx index b1dca1c75..e3cb7f0b2 100644 --- a/src/components/image-editor/model3d-generation/Model3dGenerationModal.tsx +++ b/src/components/image-editor/model3d-generation/Model3dGenerationModal.tsx @@ -5,6 +5,7 @@ import type { RefObject, SetStateAction, } from 'react'; +import { useMemo } from 'react'; import { PlatformActionButton } from '../../common/PlatformActionButton'; import { PlatformStatusMessage } from '../../common/PlatformStatusMessage'; @@ -82,9 +83,14 @@ export function Model3dGenerationModal({ const submitDialog = dialog.status === 'failed' ? refreshModel3dAttemptNonce(dialog) : dialog; + // 每次都新建数组会让上面的 dismiss effect 每次渲染都重挂监听;ref 对象本身是稳定的。 + const referenceMenuBoundaryRefs = useMemo( + () => [generationReferenceButtonRef], + [generationReferenceButtonRef], + ); useImageCanvasFloatingOptionDismiss({ isOpen: isImageMode && isGenerationReferenceMenuOpen, - boundaryRefs: [generationReferenceButtonRef], + boundaryRefs: referenceMenuBoundaryRefs, onDismiss: () => setIsGenerationReferenceMenuOpen?.(false), });