blob: 493eede3fdb69b739e15c622274053fe1da8e179 [file] [log] [blame]
// import React, { createContext, useContext, useState, useEffect } from 'react';
// const avatarBaseUrl = process.env.REACT_APP_AVATAR_BASE_URL || '';
// export const UserContext = createContext();
// export const UserProvider = ({ children }) => {
// const [user, setUser] = useState(null);
// const [loading, setLoading] = useState(true);
// const formatUser = (raw) => {
// if (!raw) return null;
// return {
// userId: raw.userId || raw.id || null,
// username: raw.username || '匿名用户',
// avatarUrl: raw.avatarUrl ? `${avatarBaseUrl}${raw.avatarUrl}` : null,
// ...raw,
// };
// };
// useEffect(() => {
// const storedUser = localStorage.getItem('user');
// if (storedUser) {
// try {
// const parsed = JSON.parse(storedUser);
// setUser(formatUser(parsed));
// } catch (err) {
// console.error('本地用户信息解析失败:', err);
// localStorage.removeItem('user');
// setUser(null);
// }
// } else {
// // 可以默认不自动登录,退出就是空
// setUser(null);
// }
// setLoading(false);
// }, []);
// const saveUser = (userData) => {
// if (userData && (userData.userId || userData.id)) {
// localStorage.setItem('user', JSON.stringify(userData));
// setUser(formatUser(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 必须在 UserProvider 内使用');
// }
// return context;
// };
import React, { createContext, useContext, useState, useEffect } from 'react';
const avatarBaseUrl = process.env.REACT_APP_AVATAR_BASE_URL || '';
export const UserContext = createContext();
export const UserProvider = ({ children }) => {
const [user, setUser] = useState(null);
const [loading, setLoading] = useState(true);
const formatUser = (raw) => {
if (!raw) return null;
return {
userId: raw.userId || raw.id || null,
username: raw.username || '匿名用户',
avatarUrl: raw.avatarUrl
? raw.avatarUrl.startsWith('http')
? raw.avatarUrl
: `${avatarBaseUrl}${raw.avatarUrl}`
: null,
...raw,
};
};
useEffect(() => {
const storedUser = localStorage.getItem('user');
if (storedUser) {
try {
const parsed = JSON.parse(storedUser);
setUser(formatUser(parsed));
} catch (err) {
console.error('本地用户信息解析失败:', err);
localStorage.removeItem('user');
setUser(null);
}
} else {
setUser(null);
}
setLoading(false);
}, []);
const saveUser = (userData) => {
if (userData && (userData.userId || userData.id)) {
const formatted = formatUser(userData);
localStorage.setItem('user', JSON.stringify(formatted));
setUser(formatted);
} 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 必须在 UserProvider 内使用');
}
return context;
};