App_20250812092750.tsx 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. // entrypoints/popup/App.tsx
  2. import { useState, useEffect } from 'react';
  3. import { HashRouter as Router, Routes, Route, Navigate } from 'react-router-dom';
  4. import { Link, useNavigate } from 'react-router-dom';
  5. import reactLogo from '@/assets/react.svg';
  6. import wxtLogo from '/wxt.svg';
  7. import './App.css';
  8. import '../../assets/tailwind.css'
  9. import BtnTest from './src/Components/BtnTest.jsx'
  10. // import Home from './pages/Home'
  11. // import About from './pages/About'
  12. import Login from './pages/Login'
  13. // 创建一个保护路由组件
  14. function ProtectedRoute({ children }: { children: React.ReactNode }) {
  15. const isLoggedIn = localStorage.getItem('isLoggedIn');
  16. return isLoggedIn ? <>{children}</> : <Navigate to="/login" replace />;
  17. }
  18. // 创建带登出功能的导航组件
  19. function Navigation({ onLogout }: { onLogout: () => void }) {
  20. const navigate = useNavigate();
  21. const handleLogout = () => {
  22. onLogout();
  23. navigate('/login');
  24. };
  25. return (
  26. <nav className="flex gap-4 p-4 items-center">
  27. <Link to="/" className="text-blue-500 hover:underline">首页</Link>
  28. {/* <Link to="/about" className="text-blue-500 hover:underline">关于</Link>
  29. <Link to="/home" className="text-blue-500 hover:underline">主页</Link> */}
  30. <button
  31. onClick={handleLogout}
  32. className="ml-auto text-red-500 hover:underline"
  33. >
  34. 退出登录
  35. </button>
  36. </nav>
  37. );
  38. }
  39. function App() {
  40. const [count, setCount] = useState(0);
  41. const [isLoggedIn, setIsLoggedIn] = useState(false);
  42. // 检查登录状态
  43. useEffect(() => {
  44. const loggedIn = localStorage.getItem('isLoggedIn') === 'true';
  45. setIsLoggedIn(loggedIn);
  46. }, []);
  47. // 处理登出逻辑
  48. const handleLogout = () => {
  49. localStorage.removeItem('isLoggedIn');
  50. setIsLoggedIn(false);
  51. };
  52. return (
  53. <Router>
  54. {/* 只在登录后显示导航栏 */}
  55. {isLoggedIn && <Navigation onLogout={handleLogout} />}
  56. <Routes>
  57. <Route path="/login" element={<Login setIsLoggedIn={setIsLoggedIn} />} />
  58. <Route path="/" element={
  59. <ProtectedRoute>
  60. <div>
  61. <button className='text-red-300'>按钮</button>
  62. </div>
  63. </ProtectedRoute>
  64. } />
  65. {/* <Route path="/about" element={
  66. <ProtectedRoute>
  67. <About />
  68. </ProtectedRoute>
  69. } />
  70. <Route path="/home" element={
  71. <ProtectedRoute>
  72. <Home />
  73. </ProtectedRoute>
  74. } /> */}
  75. </Routes>
  76. </Router>
  77. );
  78. }
  79. export default App;