From 3737b1ce9973a45fc25b3b6c2813cabeca5e0981 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 1 Feb 2026 10:20:59 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=8D=A0=E4=BD=8D?= =?UTF-8?q?=E5=9B=BE=E9=80=BB=E8=BE=91=E5=92=8C=E7=A7=BB=E9=99=A4=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E9=94=99=E8=AF=AF=E7=9A=84=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 移除 onFinish 中的 router.refresh(),它导致 React 错误 2. 简化占位图逻辑:hasImageContent 优先级最高 3. 当有图片内容时,无论其他标记如何,都隐藏占位图 Co-authored-by: Cursor --- components/chat.tsx | 8 +------- components/messages.tsx | 20 +++++++++++--------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/components/chat.tsx b/components/chat.tsx index d3a03b9fc..b8bbf0915 100644 --- a/components/chat.tsx +++ b/components/chat.tsx @@ -356,13 +356,7 @@ export function Chat({ // 🆕 生成完成,清除持久化状态 completeGeneration(); console.log("[Chat] onFinish called"); - - // 🆕 刷新页面获取最新消息,确保 data-appendMessage 添加的消息不会丢失 - // 延迟执行以确保所有状态更新完成 - setTimeout(() => { - console.log("[Chat] Refreshing to sync messages from database"); - router.refresh(); - }, 500); + // 🆕 移除 router.refresh(),因为它会导致 React 错误和消息丢失 }, onError: (error) => { if (error instanceof ChatSDKError) { diff --git a/components/messages.tsx b/components/messages.tsx index 46dedcc9d..c6631c523 100644 --- a/components/messages.tsx +++ b/components/messages.tsx @@ -229,24 +229,26 @@ function PureMessages({ status, }); - // 🆕 关键修复:当 isGeneratingImageFlag 为 true 时,优先显示占位图 - // 因为这表示后端正在生成图片,即使检测到旧的图片内容也不应该隐藏占位图 - if (isGeneratingImageFlag) { - console.log("[Messages useEffect] isGeneratingImageFlag=true,强制显示占位图"); - setShowThinkingWithDelay(true); - } else if (hasImageContent && !isGeneratingImage) { - // 只有当 isGeneratingImageFlag 为 false 且有图片内容时,才考虑隐藏占位图 + // 🆕 简化的占位图逻辑 + // 优先级:hasImageContent > isGeneratingImageFlag > isGeneratingImage > status + + if (hasImageContent) { + // 图片已生成,延迟后隐藏占位图(无论其他标记如何) console.log("[Messages useEffect] 图片已生成,延迟后隐藏"); const timer = setTimeout(() => { setShowThinkingWithDelay(false); }, delayTime); return () => clearTimeout(timer); + } else if (isGeneratingImageFlag) { + // 后端正在生成图片 + console.log("[Messages useEffect] isGeneratingImageFlag=true,显示占位图"); + setShowThinkingWithDelay(true); } else if (isGeneratingImage) { - // 消息中检测到 GENERATING_IMAGE 标记 + // 消息中检测到 GENERATING_IMAGE 标记(但没有图片内容) console.log("[Messages useEffect] 检测到消息中的生成标记,显示占位图"); setShowThinkingWithDelay(true); } else if (status === "streaming" || status === "submitted") { - // 正在处理中(分析意图或流式传输),显示占位图 + // 正在处理中(分析意图或流式传输) console.log("[Messages useEffect] streaming/submitted,显示占位图"); setShowThinkingWithDelay(true); } else {