blob: fb3a3e10583bc3ebd1c6c59f3a12eb9e5e6f0c32 [file] [log] [blame]
import React, { useState, useEffect } from 'react';
import './Header.css'; // 导入 Header.css 文件
import logo from '../assets/logo.png';
const Header = () => {
const [currentPath, setCurrentPath] = useState(window.location.pathname);
// 提取所有页面路径,简化 active 类逻辑
const navLinks = [
{ to: '/friend-moments', label: '好友动态' },
{ to: '/forum', label: '论坛' },
{ to: '/interest-groups', label: '兴趣小组' },
{ to: '/seed-list', label: '种子列表' },
{ to: '/publish-seed', label: '发布种子' },
];
// 更新当前路径状态
useEffect(() => {
const handleLocationChange = () => {
setCurrentPath(window.location.pathname);
};
// 监听历史记录变化
window.addEventListener('popstate', handleLocationChange);
// 清理事件监听器
return () => {
window.removeEventListener('popstate', handleLocationChange);
};
}, []);
// 判断路径是否是当前活动页面
const isActive = (path) => currentPath.startsWith(path);
// 自定义链接点击逻辑
const handleLinkClick = (to) => {
window.history.pushState({}, '', to);
setCurrentPath(to); // 更新当前路径状态
};
return (
<div className="main-page">
{/* 顶部栏 */}
<header className="header">
{/* 左侧 logo 和网站名称 */}
<div className="logo-and-name">
<img src={logo} alt="网站 logo" className="logo" />
<span className="site-name">Echo</span>
</div>
{/* 右侧用户头像和消息中心 */}
<div className="user-and-message">
{/* 用户头像点击跳转到个人主页 */}
<a href="/user/profile">
<img src="user-avatar.png" alt="用户头像" className="user-avatar" />
</a>
<span className="message-center">消息</span>
</div>
</header>
{/* 导航栏 */}
<nav className="nav">
{navLinks.map(({ to, label }) => (
<a
key={to}
href={to}
onClick={(e) => {
e.preventDefault(); // 防止默认跳转行为
handleLinkClick(to); // 手动更新当前路径
}}
className={`nav-item ${isActive(to) ? 'active' : ''}`}
>
{label}
</a>
))}
</nav>
</div>
);
};
export default Header;