明天在整
This commit is contained in:
parent
d0ce370509
commit
ccbc1919cd
@ -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]);
|
||||
|
||||
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 (
|
||||
<View style={[styles.container, { paddingTop: insets.top, paddingBottom: insets.bottom }]}>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user