blob: 50e6d3799f4595db7e86ca89a4eb9d6ef2cf7947 [file] [log] [blame]
Krishyaf1d0ea82025-05-03 17:01:58 +08001// import React, { useState, useEffect } from 'react';
2// import './Header.css'; // 导入 Header.css 文件
3// import logo from '../assets/logo.png';
4
5// const Header = () => {
6// const [currentPath, setCurrentPath] = useState(window.location.pathname);
7
8// // 提取所有页面路径,简化 active 类逻辑
9// const navLinks = [
10// { to: '/friend-moments', label: '好友动态' },
11// { to: '/forum', label: '论坛' },
12// { to: '/interest-groups', label: '兴趣小组' },
13// { to: '/seed-list', label: '种子列表' },
14// { to: '/publish-seed', label: '发布种子' },
15// ];
16
17// // 更新当前路径状态
18// useEffect(() => {
19// const handleLocationChange = () => {
20// setCurrentPath(window.location.pathname);
21// };
22
23// // 监听历史记录变化
24// window.addEventListener('popstate', handleLocationChange);
25
26// // 清理事件监听器
27// return () => {
28// window.removeEventListener('popstate', handleLocationChange);
29// };
30// }, []);
31
32// // 判断路径是否是当前活动页面
33// const isActive = (path) => currentPath.startsWith(path);
34
35// // 自定义链接点击逻辑
36// const handleLinkClick = (to) => {
37// window.history.pushState({}, '', to);
38// setCurrentPath(to); // 更新当前路径状态
39// };
40
41// return (
42// <div className="main-page">
43// {/* 顶部栏 */}
44// <header className="header">
45// {/* 左侧 logo 和网站名称 */}
46// <div className="logo-and-name">
47// <img src={logo} alt="网站 logo" className="logo" />
48// <span className="site-name">Echo</span>
49// </div>
50// {/* 右侧用户头像和消息中心 */}
51// <div className="user-and-message">
52// {/* 用户头像点击跳转到个人主页 */}
53// <a href="/user/profile">
54// <img src="user-avatar.png" alt="用户头像" className="user-avatar" />
55// </a>
56// <span className="message-center">消息</span>
57// </div>
58// </header>
59
60// {/* 导航栏 */}
61// <nav className="nav">
62// {navLinks.map(({ to, label }) => (
63// <a
64// key={to}
65// href={to}
66// onClick={(e) => {
67// e.preventDefault(); // 防止默认跳转行为
68// handleLinkClick(to); // 手动更新当前路径
69// }}
70// className={`nav-item ${isActive(to) ? 'active' : ''}`}
71// >
72// {label}
73// </a>
74// ))}
75// </nav>
76// </div>
77// );
78// };
79
80// export default Header;
81
22301009007da0e2025-04-15 21:24:46 +080082import React, { useState, useEffect } from 'react';
Krishyaf1d0ea82025-05-03 17:01:58 +080083import './Header.css';
223010095b28c672025-04-10 20:12:45 +080084import logo from '../assets/logo.png';
85
86const Header = () => {
22301009007da0e2025-04-15 21:24:46 +080087 const [currentPath, setCurrentPath] = useState(window.location.pathname);
223010095b28c672025-04-10 20:12:45 +080088
22301009007da0e2025-04-15 21:24:46 +080089 const navLinks = [
90 { to: '/friend-moments', label: '好友动态' },
91 { to: '/forum', label: '论坛' },
92 { to: '/interest-groups', label: '兴趣小组' },
93 { to: '/seed-list', label: '种子列表' },
94 { to: '/publish-seed', label: '发布种子' },
95 ];
96
22301009007da0e2025-04-15 21:24:46 +080097 useEffect(() => {
98 const handleLocationChange = () => {
99 setCurrentPath(window.location.pathname);
100 };
22301009007da0e2025-04-15 21:24:46 +0800101 window.addEventListener('popstate', handleLocationChange);
22301009007da0e2025-04-15 21:24:46 +0800102 return () => {
103 window.removeEventListener('popstate', handleLocationChange);
104 };
105 }, []);
106
22301009007da0e2025-04-15 21:24:46 +0800107 const isActive = (path) => currentPath.startsWith(path);
108
22301009007da0e2025-04-15 21:24:46 +0800109 const handleLinkClick = (to) => {
110 window.history.pushState({}, '', to);
Krishyaf1d0ea82025-05-03 17:01:58 +0800111 setCurrentPath(to);
22301009007da0e2025-04-15 21:24:46 +0800112 };
223010095b28c672025-04-10 20:12:45 +0800113
114 return (
115 <div className="main-page">
223010095b28c672025-04-10 20:12:45 +0800116 <header className="header">
223010095b28c672025-04-10 20:12:45 +0800117 <div className="logo-and-name">
118 <img src={logo} alt="网站 logo" className="logo" />
119 <span className="site-name">Echo</span>
120 </div>
223010095b28c672025-04-10 20:12:45 +0800121 <div className="user-and-message">
22301009007da0e2025-04-15 21:24:46 +0800122 <a href="/user/profile">
123 <img src="user-avatar.png" alt="用户头像" className="user-avatar" />
124 </a>
Krishyaf1d0ea82025-05-03 17:01:58 +0800125 {/* 修改这里,点击跳转消息页面 */}
126 <span
127 className="message-center"
128 onClick={() => handleLinkClick('/messages')}
129 style={{ cursor: 'pointer' }}
130 >
131 消息
132 </span>
223010095b28c672025-04-10 20:12:45 +0800133 </div>
134 </header>
22301009007da0e2025-04-15 21:24:46 +0800135
223010095b28c672025-04-10 20:12:45 +0800136 <nav className="nav">
22301009007da0e2025-04-15 21:24:46 +0800137 {navLinks.map(({ to, label }) => (
138 <a
139 key={to}
140 href={to}
141 onClick={(e) => {
Krishyaf1d0ea82025-05-03 17:01:58 +0800142 e.preventDefault();
143 handleLinkClick(to);
22301009007da0e2025-04-15 21:24:46 +0800144 }}
145 className={`nav-item ${isActive(to) ? 'active' : ''}`}
146 >
147 {label}
148 </a>
149 ))}
223010095b28c672025-04-10 20:12:45 +0800150 </nav>
151 </div>
152 );
153};
154
155export default Header;