fix(components): 修复组件中定时器内存泄漏问题

- 在TopLoadingBar组件中添加timeoutRef并正确清理定时器
- 在Agent页面中添加timeoutRef管理AI响应模拟定时器
- 修复BasicInformation组件中useCallback依赖数组缺失问题
- 在CreateDataset页面中传递hidden属性控制数据源显示
- 在Orchestration页面中添加intervalRef管理工作流执行进度
- 在SynthesisTask中添加testTimeoutRef管理模板测试定时器
- 确保所有组件卸载时正确清除定时器避免内存泄漏
This commit is contained in:
2026-01-30 14:35:45 +08:00
parent 98d2ef1aa5
commit accaa47a83
6 changed files with 76 additions and 10 deletions

View File

@@ -1,4 +1,4 @@
import { useState, useRef } from "react";
import { useState, useRef, useEffect } from "react";
import {
Card,
Select,
@@ -24,6 +24,7 @@ export default function InstructionTemplateCreate() {
const [templates, setTemplates] = useState<Template[]>(mockTemplates);
const [variables, setVariables] = useState<string[]>([]);
const variableInputRef = useRef<Input | null>(null);
const testTimeoutRef = useRef<NodeJS.Timeout | null>(null);
const [form] = Form.useForm();
@@ -70,12 +71,27 @@ export default function InstructionTemplateCreate() {
setVariables(variables.filter((_, i) => i !== index));
};
// 组件卸载时清理 timeout
useEffect(() => {
return () => {
if (testTimeoutRef.current) {
clearTimeout(testTimeoutRef.current);
}
};
}, []);
// 测试模板
const handleTestTemplate = async () => {
const values = form.getFieldsValue();
if (!values.prompt || !values.testInput) return;
// 清理旧的 timeout
if (testTimeoutRef.current) {
clearTimeout(testTimeoutRef.current);
}
setIsTestingTemplate(true);
setTimeout(() => {
testTimeoutRef.current = setTimeout(() => {
form.setFieldValue(
"testOutput",
`基于输入"${values.testInput}"生成的测试结果: