Spaces:
Configuration error
Configuration error
import React, { useState, useEffect } from 'react'; | |
import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom'; | |
import Login from './components/Login'; | |
import Register from './components/Register'; | |
import Chat from './components/Chat'; | |
import { User } from './types'; | |
function App() { | |
const [user, setUser] = useState<User | null>(null); | |
const [loading, setLoading] = useState(true); | |
useEffect(() => { | |
// 检查本地存储中的用户信息 | |
const token = localStorage.getItem('token'); | |
const userData = localStorage.getItem('user'); | |
if (token && userData) { | |
try { | |
const parsedUser = JSON.parse(userData); | |
setUser(parsedUser); | |
} catch (error) { | |
console.error('解析用户数据失败:', error); | |
localStorage.removeItem('token'); | |
localStorage.removeItem('user'); | |
} | |
} | |
setLoading(false); | |
}, []); | |
const handleLogin = (userData: User, token: string) => { | |
setUser(userData); | |
localStorage.setItem('token', token); | |
localStorage.setItem('user', JSON.stringify(userData)); | |
}; | |
const handleLogout = () => { | |
setUser(null); | |
localStorage.removeItem('token'); | |
localStorage.removeItem('user'); | |
}; | |
if (loading) { | |
return ( | |
<div className="min-h-screen flex items-center justify-center bg-gray-50"> | |
<div className="animate-spin rounded-full h-12 w-12 border-b-2 border-primary-600"></div> | |
</div> | |
); | |
} | |
return ( | |
<Router> | |
<div className="min-h-screen bg-gray-50"> | |
<Routes> | |
<Route | |
path="/login" | |
element={ | |
user ? ( | |
<Navigate to="/chat" replace /> | |
) : ( | |
<Login onLogin={handleLogin} /> | |
) | |
} | |
/> | |
<Route | |
path="/register" | |
element={ | |
user ? ( | |
<Navigate to="/chat" replace /> | |
) : ( | |
<Register onRegister={handleLogin} /> | |
) | |
} | |
/> | |
<Route | |
path="/chat" | |
element={ | |
user ? ( | |
<Chat user={user} onLogout={handleLogout} /> | |
) : ( | |
<Navigate to="/login" replace /> | |
) | |
} | |
/> | |
<Route | |
path="/" | |
element={ | |
<Navigate to={user ? "/chat" : "/login"} replace /> | |
} | |
/> | |
</Routes> | |
</div> | |
</Router> | |
); | |
} | |
export default App; | |