diff --git a/components/chat.tsx b/components/chat.tsx index 454f995e6..872f3c50b 100644 --- a/components/chat.tsx +++ b/components/chat.tsx @@ -400,13 +400,8 @@ export function Chat({ // 🆕 保存 initialMessages 的引用,防止历史消息丢失 // 当 useChat 内部状态重置时,我们仍然有初始消息 + // 注意:这个 ref 永远保持初始加载的消息,不会更新 const initialMessagesRef = useRef(initialMessages); - useEffect(() => { - // 只在初始化时设置,不在后续更新 - if (initialMessagesRef.current.length === 0 && initialMessages.length > 0) { - initialMessagesRef.current = initialMessages; - } - }, [initialMessages]); // 调试:监控聊天状态变化 & 持久化生成状态 // 使用 ref 来访问最新的 modelsData,避免依赖数组问题 @@ -1102,8 +1097,14 @@ export function Chat({ // 使用 Map 进行去重,以 ID 为键 const messageMap = new Map(); + // 🆕 确保 initialMessagesRef 有值 + // 如果 ref 是空的但 initialMessages prop 有值,使用 prop + const baseMessages = initialMessagesRef.current.length > 0 + ? initialMessagesRef.current + : initialMessages; + // 1. 首先添加初始消息(历史记录) - initialMessagesRef.current.forEach(m => { + baseMessages.forEach(m => { messageMap.set(m.id, m); }); @@ -1126,9 +1127,9 @@ export function Chat({ return timeA - timeB; }); - console.log("[Chat] Merged messages:", result.length, "(initial:", initialMessagesRef.current.length, ", current:", messages.length, ", appended:", appendedMessages.length, ")"); + console.log("[Chat] Merged messages:", result.length, "(base:", baseMessages.length, ", current:", messages.length, ", appended:", appendedMessages.length, ")"); return result; - }, [messages, appendedMessages]); + }, [messages, appendedMessages, initialMessages]); return ( <>