diff --git a/apps/web/src/pages/generate/hooks/useStep2Materials.ts b/apps/web/src/pages/generate/hooks/useStep2Materials.ts index 24fcd22fa..06f41797b 100755 --- a/apps/web/src/pages/generate/hooks/useStep2Materials.ts +++ b/apps/web/src/pages/generate/hooks/useStep2Materials.ts @@ -36,19 +36,20 @@ export function useStep2Materials({ /* ── 自动触发智能匹配:选择视频库后自动调用 ── */ const autoTriggeredRef = useRef("") + const { handleSmartMatch } = smartMatch useEffect(() => { // 仅在 auto 模式 + 素材加载完成后自动触发 if (materialMode !== "auto") return if (!selectedLibraryId) return if (materialsLoading) return if (materials.items.length === 0) return - // 防止同一视频库重复触发 - if (autoTriggeredRef.current === selectedLibraryId) return + // 防止同一视频库+同一模式重复触发(模式切换时 key 变化会重新触发) + const triggerKey = `${selectedLibraryId}_${materialMode}` + if (autoTriggeredRef.current === triggerKey) return - autoTriggeredRef.current = selectedLibraryId - smartMatch.handleSmartMatch() - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [selectedLibraryId, materialMode, materialsLoading, materials.items.length]) + autoTriggeredRef.current = triggerKey + handleSmartMatch() + }, [selectedLibraryId, materialMode, materialsLoading, materials.items, handleSmartMatch]) /* ── 手动选择素材 ── */ const handleToggleMaterial = useCallback(