Header.jsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import React, {useEffect, useRef, useState} from 'react';
  2. import Navigation from "../Navigation/Navigation";
  3. import logo from '../../assets/images/main/logo.png';
  4. import Styles from './Header.module.css';
  5. import {useTranslation} from "react-i18next";
  6. import {HOME} from "../../uitls/Constants";
  7. import {Link} from "react-router-dom";
  8. import eventBus from "../../uitls/EventBus";
  9. // 顶部导航栏组件
  10. const Header = () => {
  11. const {i18n} = useTranslation();
  12. const [isMenuOpen, setIsMenuOpen] = useState(false);
  13. const currentMenuState = useRef(true);
  14. const changeLanguage = () => {
  15. const currentLanguage = i18n.language === 'zh' ? 'en' : 'zh'
  16. i18n.changeLanguage(currentLanguage);
  17. };
  18. const handleEmailClick = () => {
  19. const email = 'info@zhengqiai.com';
  20. const subject = encodeURIComponent('');
  21. const body = encodeURIComponent('');
  22. window.location.href = `mailto:${email}?subject=${subject}&body=${body}`;
  23. };
  24. useEffect(() => {
  25. eventBus.on("drawerStateRecover", (state) => {
  26. console.log(`drawerStateRecover ${state}`)
  27. currentMenuState.current = state;
  28. setIsMenuOpen(!state);
  29. });
  30. return () => {
  31. eventBus.off("drawerStateRecover");
  32. };
  33. }, []);
  34. return (
  35. <header className={Styles.root}>
  36. <button
  37. className={Styles.menuBtn}
  38. onClick={() => {
  39. eventBus.emit('drawerState', currentMenuState.current);
  40. setIsMenuOpen(currentMenuState.current);
  41. currentMenuState.current = !currentMenuState.current;
  42. }}
  43. >
  44. {isMenuOpen ?'✕':'☰'}
  45. </button>
  46. <Link to={HOME} className={Styles.link} onClick={() => eventBus.emit('changeTabEvent', HOME)}>
  47. <img className={Styles.logoImg} src={logo} alt="logo"/>
  48. </Link>
  49. <div className={Styles.navigationState}>
  50. <Navigation/>
  51. </div>
  52. </header>
  53. );
  54. };
  55. export default Header;