From accaa47a831d0fd63f5e6d14b78bd8ef1c6e373f Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Fri, 30 Jan 2026 14:35:45 +0800 Subject: [PATCH] =?UTF-8?q?fix(components):=20=E4=BF=AE=E5=A4=8D=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E4=B8=AD=E5=AE=9A=E6=97=B6=E5=99=A8=E5=86=85=E5=AD=98?= =?UTF-8?q?=E6=B3=84=E6=BC=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在TopLoadingBar组件中添加timeoutRef并正确清理定时器 - 在Agent页面中添加timeoutRef管理AI响应模拟定时器 - 修复BasicInformation组件中useCallback依赖数组缺失问题 - 在CreateDataset页面中传递hidden属性控制数据源显示 - 在Orchestration页面中添加intervalRef管理工作流执行进度 - 在SynthesisTask中添加testTimeoutRef管理模板测试定时器 - 确保所有组件卸载时正确清除定时器避免内存泄漏 --- frontend/src/components/TopLoadingBar.tsx | 11 ++++++- frontend/src/pages/Agent/Agent.tsx | 16 +++++++++- .../DataManagement/Create/CreateDataset.tsx | 6 +++- .../Create/components/BasicInformation.tsx | 3 +- .../src/pages/Orchestration/Orchestration.tsx | 30 ++++++++++++++++--- .../pages/SynthesisTask/CreateTemplate.tsx | 20 +++++++++++-- 6 files changed, 76 insertions(+), 10 deletions(-) diff --git a/frontend/src/components/TopLoadingBar.tsx b/frontend/src/components/TopLoadingBar.tsx index ec95fd1..9ab113e 100644 --- a/frontend/src/components/TopLoadingBar.tsx +++ b/frontend/src/components/TopLoadingBar.tsx @@ -4,6 +4,7 @@ const TopLoadingBar = () => { const [isVisible, setIsVisible] = useState(false); const [progress, setProgress] = useState(0); const intervalRef = useRef(null); + const timeoutRef = useRef(null); useEffect(() => { // 监听全局事件 @@ -33,8 +34,13 @@ const TopLoadingBar = () => { clearInterval(intervalRef.current); intervalRef.current = null; } + // 清除旧的timeout + if (timeoutRef.current) { + clearTimeout(timeoutRef.current); + timeoutRef.current = null; + } setProgress(100); - setTimeout(() => { + timeoutRef.current = setTimeout(() => { setIsVisible(false); setProgress(0); }, 300); @@ -49,6 +55,9 @@ const TopLoadingBar = () => { if (intervalRef.current) { clearInterval(intervalRef.current); } + if (timeoutRef.current) { + clearTimeout(timeoutRef.current); + } window.removeEventListener("loading:show", handleShow); window.removeEventListener("loading:hide", handleHide); }; diff --git a/frontend/src/pages/Agent/Agent.tsx b/frontend/src/pages/Agent/Agent.tsx index 94df683..528e813 100644 --- a/frontend/src/pages/Agent/Agent.tsx +++ b/frontend/src/pages/Agent/Agent.tsx @@ -151,6 +151,15 @@ export default function AgentPage() { const [isTyping, setIsTyping] = useState(false); const messagesEndRef = useRef(null); const inputRef = useRef(null); + const timeoutRef = useRef(null); + + useEffect(() => { + return () => { + if (timeoutRef.current) { + clearTimeout(timeoutRef.current); + } + }; + }, []); const scrollToBottom = () => { messagesEndRef.current?.scrollIntoView({ behavior: "smooth" }); @@ -174,8 +183,13 @@ export default function AgentPage() { setInputValue(""); setIsTyping(true); + // 清理旧的 timeout + if (timeoutRef.current) { + clearTimeout(timeoutRef.current); + } + // 模拟AI响应 - setTimeout(() => { + timeoutRef.current = setTimeout(() => { const response = generateResponse(content); const assistantMessage: Message = { id: (Date.now() + 1).toString(), diff --git a/frontend/src/pages/DataManagement/Create/CreateDataset.tsx b/frontend/src/pages/DataManagement/Create/CreateDataset.tsx index 5479324..ff19b4b 100644 --- a/frontend/src/pages/DataManagement/Create/CreateDataset.tsx +++ b/frontend/src/pages/DataManagement/Create/CreateDataset.tsx @@ -78,7 +78,11 @@ export default function DatasetCreate() { onValuesChange={handleValuesChange} layout="vertical" > - +