Commit b23d7f44 by weiyudumei

fix: 修复 workflow 卡片自动提交重复触发的问题,使用 useRef 和 useCallback 稳定函数引用

parent 6ae9376c
......@@ -409,7 +409,7 @@ export const Chat: React.FC = () => {
}
/** 处理 workflow 表单提交 */
const handleWorkflowSubmit = async (paramMap: Record<string, string>, recordId?: string, workFlowSessionId?: string) => {
const handleWorkflowSubmit = useCallback(async (paramMap: Record<string, string>, recordId?: string, workFlowSessionId?: string) => {
// workflow 提交时,question 可以为空字符串,但需要传递 paramMap、recordId 和 workFlowSessionId
await handleSubmitQuestion('', undefined, undefined, {
paramMap,
......@@ -417,7 +417,7 @@ export const Chat: React.FC = () => {
workFlowSessionId,
recordType: 'A01',
})
}
}, [])
/** 获取qa记录 */
const getUserQaRecordPage = useCallback(async (conversationId: string, toolId?: string) => {
......
......@@ -22,6 +22,12 @@ export const CardWorkflowForm: React.FC<CardWorkflowFormProps> = ({
const [searchParams] = useSearchParams()
const hasAutoSubmittedRef = useRef(false) // 防止重复自动提交
const lastFirstQaFlagRef = useRef<boolean | undefined>(undefined) // 记录上次的 firstQaFlag 值
const onSubmitWorkflowRef = useRef(onSubmitWorkflow) // 保存 onSubmitWorkflow 的引用,避免依赖项变化导致重复执行
// 更新 onSubmitWorkflowRef 的引用
useEffect(() => {
onSubmitWorkflowRef.current = onSubmitWorkflow
}, [onSubmitWorkflow])
// 获取 text 类型的字段,使用 useMemo 稳定引用
const textFields = useMemo(() => {
......@@ -85,12 +91,13 @@ export const CardWorkflowForm: React.FC<CardWorkflowFormProps> = ({
// 延迟一下再提交,确保表单值已经设置完成
setTimeout(() => {
onSubmitWorkflow(paramMap, recordId, workFlowSessionId)
onSubmitWorkflowRef.current(paramMap, recordId, workFlowSessionId)
}, 100)
}
}
// 移除 answer.recordId 和 answer.workFlowSessionId 作为依赖项,避免流式更新时重复触发
}, [answer.firstQaFlag, isSubmitting, isCompleted, searchParams, textFields, onSubmitWorkflow])
// 移除 onSubmitWorkflow 作为依赖项,使用 useRef 保存引用,避免函数引用变化导致重复触发
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [answer.firstQaFlag, isSubmitting, isCompleted, searchParams, textFields])
const handleInputChange = (key: string, value: string) => {
setFormValues(prev => ({
......
......@@ -625,7 +625,7 @@ export const TacticsChat: React.FC = () => {
}
/** 处理 workflow 表单提交 */
const handleWorkflowSubmit = async (paramMap: Record<string, string>, recordId?: string, workFlowSessionId?: string) => {
const handleWorkflowSubmit = useCallback(async (paramMap: Record<string, string>, recordId?: string, workFlowSessionId?: string) => {
// workflow 提交时,question 可以为空字符串,但需要传递 paramMap、recordId 和 workFlowSessionId
await handleSubmitQuestion(undefined, undefined, undefined, {
includeQuestion: false,
......@@ -634,7 +634,7 @@ export const TacticsChat: React.FC = () => {
workFlowSessionId,
recordType: 'A01',
})
}
}, [])
/** 获取qa记录 */
const getUserQaRecordPage = useCallback(async (conversationId: string) => {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment