明天在整
This commit is contained in:
parent
d0ce370509
commit
ccbc1919cd
@ -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(() => {
|
|
||||||
if (!isHello && isMountedRef.current) {
|
|
||||||
// 不再自动关闭键盘,让用户手动控制
|
|
||||||
// 这里可以添加其他需要在隐藏hello界面时执行的逻辑
|
|
||||||
scrollToEnd(false);
|
|
||||||
}
|
|
||||||
}, [isHello, scrollToEnd]);
|
|
||||||
|
|
||||||
useFocusEffect(
|
|
||||||
useCallback(() => {
|
|
||||||
if (!sessionId && isMountedRef.current) {
|
|
||||||
setIsHello(true);
|
|
||||||
setUserMessages([]);
|
|
||||||
}
|
|
||||||
}, [sessionId])
|
|
||||||
);
|
|
||||||
|
|
||||||
// 组件卸载时的清理
|
// useEffect(() => {
|
||||||
useEffect(() => {
|
// return () => {
|
||||||
return () => {
|
// cleanup();
|
||||||
cleanup();
|
// };
|
||||||
};
|
// }, [cleanup]);
|
||||||
}, [cleanup]);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View style={[styles.container, { paddingTop: insets.top, paddingBottom: insets.bottom }]}>
|
<View style={[styles.container, { paddingTop: insets.top, paddingBottom: insets.bottom }]}>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user