明天在整

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