明天在整

This commit is contained in:
Junhui Chen 2025-08-07 01:43:08 +08:00
parent d0ce370509
commit ccbc1919cd

View File

@ -87,73 +87,66 @@ export default function AskScreen() {
}
}, []);
useEffect(() => {
if (!isHello && userMessages.length > 0 && isMountedRef.current) {
scrollToEnd();
}
}, [userMessages, isHello, scrollToEnd]);
// 暂时注释掉复杂的useEffect逻辑
// useEffect(() => {
// if (!isHello && userMessages.length > 0 && isMountedRef.current) {
// scrollToEnd();
// }
// }, [userMessages, isHello, scrollToEnd]);
useEffect(() => {
const keyboardDidShowListener = Keyboard.addListener(
'keyboardDidShow',
(e) => {
if (keyboardTimeoutRef.current) {
clearTimeout(keyboardTimeoutRef.current);
}
// useEffect(() => {
// const keyboardDidShowListener = Keyboard.addListener(
// 'keyboardDidShow',
// (e) => {
// if (keyboardTimeoutRef.current) {
// clearTimeout(keyboardTimeoutRef.current);
// }
// keyboardTimeoutRef.current = setTimeout(() => {
// if (isMountedRef.current && !isHello) {
// scrollToEnd();
// }
// }, 100);
// }
// );
// const keyboardDidHideListener = Keyboard.addListener(
// 'keyboardDidHide',
// () => {
// if (keyboardTimeoutRef.current) {
// clearTimeout(keyboardTimeoutRef.current);
// }
// keyboardTimeoutRef.current = setTimeout(() => {
// if (isMountedRef.current && !isHello) {
// scrollToEnd(false);
// }
// }, 100);
// }
// );
// return () => {
// keyboardDidShowListener.remove();
// keyboardDidHideListener.remove();
// if (keyboardTimeoutRef.current) {
// clearTimeout(keyboardTimeoutRef.current);
// }
// };
// }, [isHello, scrollToEnd]);
keyboardTimeoutRef.current = setTimeout(() => {
if (isMountedRef.current && !isHello) {
scrollToEnd();
}
}, 100);
}
);
// 暂时注释掉WebSocket hook来排查问题
// const { subscribeToWebSocket } = useWebSocketStreamHandler({
// setUserMessages,
// isMounted: true,
// enableBatching: false
// });
const keyboardDidHideListener = Keyboard.addListener(
'keyboardDidHide',
() => {
if (keyboardTimeoutRef.current) {
clearTimeout(keyboardTimeoutRef.current);
}
keyboardTimeoutRef.current = setTimeout(() => {
if (isMountedRef.current && !isHello) {
scrollToEnd(false);
}
}, 100);
}
);
return () => {
keyboardDidShowListener.remove();
keyboardDidHideListener.remove();
if (keyboardTimeoutRef.current) {
clearTimeout(keyboardTimeoutRef.current);
}
};
}, [isHello, scrollToEnd]);
// 使用新的WebSocket流处理hook使用实时模式
const { subscribeToWebSocket } = useWebSocketStreamHandler({
setUserMessages,
isMounted: true, // 传递静态值hook内部会使用ref跟踪
enableBatching: false // AskScreen使用实时模式
});
useFocusEffect(
useCallback(() => {
isMountedRef.current = true;
// 订阅WebSocket消息
const unsubscribe = subscribeToWebSocket();
return () => {
// 取消订阅和执行清理
unsubscribe();
cleanup();
};
}, [subscribeToWebSocket, cleanup])
);
// useFocusEffect(
// useCallback(() => {
// isMountedRef.current = true;
// const unsubscribe = subscribeToWebSocket();
// return () => {
// unsubscribe();
// cleanup();
// };
// }, [subscribeToWebSocket, cleanup])
// );
// 创建动画样式
const welcomeStyle = useAnimatedStyle(() => {
@ -170,61 +163,55 @@ export default function AskScreen() {
};
});
// 触发动画
useEffect(() => {
fadeAnim.value = withTiming(isHello ? 1 : 0, { duration: 300 });
fadeAnimChat.value = withTiming(isHello ? 0 : 1, { duration: 300 });
}, [isHello]);
// 暂时注释掉所有复杂的useEffect逻辑
// useEffect(() => {
// fadeAnim.value = withTiming(isHello ? 1 : 0, { duration: 300 });
// fadeAnimChat.value = withTiming(isHello ? 0 : 1, { duration: 300 });
// }, [isHello]);
useEffect(() => {
if (sessionId && isMountedRef.current) {
setConversationId(sessionId);
setIsHello(false);
// useEffect(() => {
// if (sessionId && isMountedRef.current) {
// setConversationId(sessionId);
// setIsHello(false);
// abortControllerRef.current = new AbortController();
// fetchApi<Message[]>(`/chats/${sessionId}/message-history`, {
// signal: abortControllerRef.current.signal
// }).then((res) => {
// if (isMountedRef.current) {
// setUserMessages(res);
// }
// }).catch((error) => {
// if (error.name !== 'AbortError') {
// console.error('获取消息历史失败:', error);
// }
// });
// }
// if (newSession && isMountedRef.current) {
// setIsHello(true);
// setConversationId(null);
// }
// }, [sessionId, newSession]);
// 创建新的AbortController
abortControllerRef.current = new AbortController();
// useEffect(() => {
// if (!isHello && isMountedRef.current) {
// scrollToEnd(false);
// }
// }, [isHello, scrollToEnd]);
fetchApi<Message[]>(`/chats/${sessionId}/message-history`, {
signal: abortControllerRef.current.signal
}).then((res) => {
if (isMountedRef.current) {
setUserMessages(res);
}
}).catch((error) => {
if (error.name !== 'AbortError') {
console.error('获取消息历史失败:', error);
}
});
}
if (newSession && isMountedRef.current) {
setIsHello(true);
setConversationId(null);
}
}, [sessionId, newSession]);
// useFocusEffect(
// useCallback(() => {
// if (!sessionId && isMountedRef.current) {
// setIsHello(true);
// setUserMessages([]);
// }
// }, [sessionId])
// );
useEffect(() => {
if (!isHello && isMountedRef.current) {
// 不再自动关闭键盘,让用户手动控制
// 这里可以添加其他需要在隐藏hello界面时执行的逻辑
scrollToEnd(false);
}
}, [isHello, scrollToEnd]);
useFocusEffect(
useCallback(() => {
if (!sessionId && isMountedRef.current) {
setIsHello(true);
setUserMessages([]);
}
}, [sessionId])
);
// 组件卸载时的清理
useEffect(() => {
return () => {
cleanup();
};
}, [cleanup]);
// useEffect(() => {
// return () => {
// cleanup();
// };
// }, [cleanup]);
return (
<View style={[styles.container, { paddingTop: insets.top, paddingBottom: insets.bottom }]}>