fix: 改进消息合并逻辑,确保历史消息不丢失
1. 简化 initialMessagesRef 初始化 2. 在 mergedMessages 中使用 baseMessages 作为后备 3. 添加 initialMessages 到 useMemo 依赖数组 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
12ae592746
commit
d6073ec091
@ -400,13 +400,8 @@ export function Chat({
|
||||
|
||||
// 🆕 保存 initialMessages 的引用,防止历史消息丢失
|
||||
// 当 useChat 内部状态重置时,我们仍然有初始消息
|
||||
// 注意:这个 ref 永远保持初始加载的消息,不会更新
|
||||
const initialMessagesRef = useRef<ChatMessage[]>(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<string, ChatMessage>();
|
||||
|
||||
// 🆕 确保 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 (
|
||||
<>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user