From 28bacfc1255cc0193c60e8871caceb4bc3b539eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Tue, 22 Sep 2026 16:55:39 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=BB=E5=B8=83=E7=94=9F=E6=88=90=E9=9D=A2?= =?UTF-8?q?=E6=9D=BF=E7=9A=84=E5=BC=95=E7=94=A8=20provider=20=E6=8C=89?= =?UTF-8?q?=E7=B4=A0=E6=9D=90=E5=86=85=E5=AE=B9=E7=AD=BE=E5=90=8D=E8=AE=B0?= =?UTF-8?q?=E5=BF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ResourceCanvasAssetGenerationPanelView 的 referenceProviders 改依赖 assetsSignature(referenceAssets):referenceAssets 由 .filter() 派生、每次渲染都是新数组,原来的 [referenceAssets] 依赖永远命中不了缓存 - 注释写明「provider 身份一变,输入区就重新注册 Lexical 更新监听」,避免以后又改回数组依赖 --- .../ResourceCanvasAssetGenerationPanelView.tsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/ai-game-creator-shell/src/features/resource-canvas/ResourceCanvasAssetGenerationPanelView.tsx b/apps/ai-game-creator-shell/src/features/resource-canvas/ResourceCanvasAssetGenerationPanelView.tsx index d4934178f..70f91e38a 100644 --- a/apps/ai-game-creator-shell/src/features/resource-canvas/ResourceCanvasAssetGenerationPanelView.tsx +++ b/apps/ai-game-creator-shell/src/features/resource-canvas/ResourceCanvasAssetGenerationPanelView.tsx @@ -35,6 +35,7 @@ import { type ResourceReferencePickerHandle, } from '../project-workspace/ResourceReferencePicker'; import { + assetsSignature, type ChatComposerDraft, directCodexContentKey, directCodexContentToLegacyContentDto, @@ -262,17 +263,21 @@ export function ResourceCanvasAssetGenerationPanelView({ const referenceAssets = resourceCanvasAssetGenerationReferenceAssets( assets ?? [], ); + const referenceAssetsSignature = assetsSignature(referenceAssets); /* 引用来源:画布生成面板只注入资源与两个静默 provider——它把 `@` 引用当参考图用, 而 `$` Skill 候选只有 DirectProject 回合那条路径会被解析成真 Skill,这里不注入。 - */ + */ const referenceProviders = useMemo( () => [ createResourceReferenceProvider({ assets: referenceAssets }), attachmentReferenceProvider, runtimeRegionReferenceProvider, ], - [referenceAssets], + // `referenceAssets` 每次渲染都是新数组(`.filter()` 派生),依赖它等于从不命中缓存: + // provider 身份一变,输入区就会重新注册 Lexical 更新监听。按内容签名取依赖才真的能跳过重建。 + // eslint-disable-next-line react-hooks/exhaustive-deps + [referenceAssetsSignature], ); const promptInputRootRef = useRef(null); const referencePickerRef = useRef(null);