From ccbc1919cd0f6c116ad7a4f8d5b3ec97d7f8cbfd Mon Sep 17 00:00:00 2001 From: Junhui Chen Date: Thu, 7 Aug 2025 01:43:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=98=8E=E5=A4=A9=E5=9C=A8=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/(tabs)/ask.tsx | 217 +++++++++++++++++++++------------------------ 1 file changed, 102 insertions(+), 115 deletions(-) diff --git a/app/(tabs)/ask.tsx b/app/(tabs)/ask.tsx index b494bb6..57be264 100644 --- a/app/(tabs)/ask.tsx +++ b/app/(tabs)/ask.tsx @@ -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(`/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(`/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]); - - useEffect(() => { - if (!isHello && isMountedRef.current) { - // 不再自动关闭键盘,让用户手动控制 - // 这里可以添加其他需要在隐藏hello界面时执行的逻辑 - scrollToEnd(false); - } - }, [isHello, scrollToEnd]); - - useFocusEffect( - useCallback(() => { - if (!sessionId && isMountedRef.current) { - setIsHello(true); - setUserMessages([]); - } - }, [sessionId]) - ); + // useFocusEffect( + // useCallback(() => { + // if (!sessionId && isMountedRef.current) { + // setIsHello(true); + // setUserMessages([]); + // } + // }, [sessionId]) + // ); - // 组件卸载时的清理 - useEffect(() => { - return () => { - cleanup(); - }; - }, [cleanup]); + // useEffect(() => { + // return () => { + // cleanup(); + // }; + // }, [cleanup]); return (