import { useState, useEffect } from 'react';
// 自定义Hooks useUserState
const useUserState = () => {
const [isLoggedIn, setIsLoggedIn] = useState(false);
const [userInfo, setUserInfo] = useState({
username: '',
email: ''
});
// 模拟从本地存储加载用户状态和信息
useEffect(() => {
const storedIsLoggedIn = localStorage.getItem('isLoggedIn') === 'true';
if (storedIsLoggedIn) {
const storedUserInfo = JSON.parse(localStorage.getItem('userInfo'));
setIsLoggedIn(storedIsLoggedIn);
setUserInfo(storedUserInfo);
}
}, []);
// 模拟登录操作
const login = (userData) => {
setIsLoggedIn(true);
setUserInfo(userData);
localStorage.setItem('isLoggedIn', 'true');
localStorage.setItem('userInfo', JSON.stringify(userData));
};
// 模拟登出操作
const logout = () => {
setIsLoggedIn(false);
setUserInfo({
username: '',
email: ''
});
localStorage.removeItem('isLoggedIn');
localStorage.removeItem('userInfo');
};
return {
isLoggedIn,
userInfo,
login,
logout
};
};
// 使用useUserState的组件
const UserComponent = () => {
const { isLoggedIn, userInfo, login, logout } = useUserState();
return (
<div>
{!isLoggedIn && (
<div>
<p>未登录,请登录。</p>
<button onClick={() => login({ username: 'testUser', email: 'test@example.com' })}>模拟登录</button>
</div>
)}
{isLoggedIn && (
<div>
{Object.keys(userInfo).every(key => userInfo[key]) ? (
<div>
<p>用户名: {userInfo.username}</p>
<p>邮箱: {userInfo.email}</p>
<button onClick={logout}>登出</button>
</div>
) : (
<div>
<p>用户信息不完整,请补充。</p>
<button onClick={logout}>登出</button>
</div>
)}
</div>
)}
</div>
);
};
export default UserComponent;