blob: 39ab6cde59d2d61eeb2c424ea35da8b5e7acc07c [file] [log] [blame]
import React, { createContext, useContext, useState, useEffect } from 'react';
export const UserContext = createContext();
export const UserProvider = ({ children }) => {
const [user, setUser] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
const storedUser = localStorage.getItem('user');
if (storedUser) {
try {
const parsedUser = JSON.parse(storedUser);
// 验证用户对象是否有效
if (parsedUser && parsedUser.userId) {
setUser(parsedUser);
} else {
localStorage.removeItem('user');
}
} catch (error) {
console.error('解析用户信息失败:', error);
localStorage.removeItem('user');
}
}
setLoading(false);
}, []);
const saveUser = (userData) => {
if (userData && userData.id) {
localStorage.setItem('user', JSON.stringify(userData));
setUser(userData);
} else {
console.error('无效的用户数据:', userData);
}
};
const logout = () => {
localStorage.removeItem('user');
setUser(null);
};
return (
<UserContext.Provider value={{ user, saveUser, logout, loading }}>
{children}
</UserContext.Provider>
);
};
export const useUser = () => {
const context = useContext(UserContext);
if (!context) {
throw new Error('useUser must be used within a UserProvider');
}
return context;
};