ChatMessage.tsx 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /**
  2. * 聊天消息组件
  3. */
  4. 'use client';
  5. import { useEffect } from 'react';
  6. interface ChatMessageProps {
  7. role: 'user' | 'assistant';
  8. content: string;
  9. isLoading?: boolean;
  10. }
  11. export default function ChatMessage({ role, content, isLoading }: ChatMessageProps) {
  12. const isUser = role === 'user';
  13. // 调试日志
  14. useEffect(() => {
  15. if (!isUser) {
  16. console.log('[ChatMessage] Rendering assistant message:', {
  17. contentLength: content?.length || 0,
  18. contentPreview: content?.substring(0, 100),
  19. isLoading,
  20. });
  21. }
  22. }, [content, isLoading, isUser]);
  23. return (
  24. <div className={`flex ${isUser ? 'justify-end' : 'justify-start'}`}>
  25. <div
  26. className={`message-bubble ${
  27. isUser ? 'user-message' : 'assistant-message'
  28. }`}
  29. >
  30. {!isUser && (
  31. <div className="text-xs text-gray-500 dark:text-gray-400 mb-1">
  32. AI 助手
  33. </div>
  34. )}
  35. <div className="whitespace-pre-wrap break-words">
  36. {content || <span className="text-gray-400 italic">暂无内容</span>}
  37. {isLoading && (
  38. <span className="inline-block ml-1 animate-pulse">▊</span>
  39. )}
  40. </div>
  41. </div>
  42. </div>
  43. );
  44. }