画布生成面板的引用 provider 按素材内容签名记忆
- ResourceCanvasAssetGenerationPanelView 的 referenceProviders 改依赖 assetsSignature(referenceAssets):referenceAssets 由 .filter() 派生、每次渲染都是新数组,原来的 [referenceAssets] 依赖永远命中不了缓存 - 注释写明「provider 身份一变,输入区就重新注册 Lexical 更新监听」,避免以后又改回数组依赖
This commit is contained in:
+7
-2
@@ -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<HTMLDivElement | null>(null);
|
||||
const referencePickerRef = useRef<ResourceReferencePickerHandle | null>(null);
|
||||
|
||||
Reference in New Issue
Block a user