blob: 05d90462fcced80d6fd09c92d337c4159e08449c [file] [log] [blame]
Krishya6bf199c2025-06-06 21:14:23 +08001import React, { useEffect, useState } from 'react';
2import { useUser } from '../../context/UserContext';
3import './UserDynamics.css';
4
5const UserDynamics = () => {
6 const { user } = useUser();
7 const [dynamics, setDynamics] = useState([]);
8 const [loading, setLoading] = useState(true);
9
10 useEffect(() => {
11 if (!user?.userId) return;
12
13 const fetchDynamics = async () => {
14 try {
15 const res = await fetch(`/echo/dynamic/${user.userId}/getAdynamic`);
16 const data = await res.json();
17 setDynamics(data.dynamic || []);
18 } catch (err) {
19 console.error('获取动态失败:', err);
20 } finally {
21 setLoading(false);
22 }
23 };
24
25 fetchDynamics();
26 }, [user]);
27
28 if (loading) return <div className="user-dynamics-loading">加载中...</div>;
29
30 return (
31 <div className="user-dynamics-container">
32 <h2 className="user-dynamics-title">我的动态</h2>
33 {dynamics.length === 0 ? (
34 <div className="user-dynamics-empty">暂无动态</div>
35 ) : (
36 dynamics.map((item) => (
37 <div key={item.dynamic_id} className="dynamic-card">
38 <div className="dynamic-header">
39 <img
40 className="dynamic-avatar"
41 src={item.avatar_url}
42 alt={item.username}
43 />
44 <div className="dynamic-userinfo">
45 <span className="dynamic-username">{item.username}</span>
46 <span className="dynamic-time">{new Date(item.time).toLocaleString()}</span>
47 </div>
48 </div>
49 <div className="dynamic-content">
50 {item.title && <h4 className="dynamic-title">{item.title}</h4>}
51 <p>{item.content}</p>
52 {/* {item.images && (
53 <div className="dynamic-images">
54 {JSON.parse(item.images).map((img, index) => (
55 <img key={index} src={img} alt={`图${index + 1}`} />
56 ))}
57 </div>
58 )} */}
59 {item.images && (
60 <div className="dynamic-images">
61 {(() => {
62 let imageList = [];
63 try {
64 if (item.images.startsWith('[')) {
65 imageList = JSON.parse(item.images);
66 } else {
67 imageList = [item.images];
68 }
69 } catch (e) {
70 console.error('解析 images 出错:', e);
71 }
72
73 return imageList.map((img, index) => (
74 <img key={index} src={img} alt={`图${index + 1}`} />
75 ));
76 })()}
77 </div>
78 )}
79
80 </div>
81 </div>
82 ))
83 )}
84 </div>
85 );
86};
87
88export default UserDynamics;