修改帖子
Change-Id: I467b35242bce8b27d612eb96f2710b27aa03d1d2
diff --git a/src/context/UserContext.js b/src/context/UserContext.js
index 69f73bd..39ab6cd 100644
--- a/src/context/UserContext.js
+++ b/src/context/UserContext.js
@@ -1,49 +1,7 @@
-// import React, { createContext, useContext, useState, useEffect } from 'react';
-
-// 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) {
-// setUser(JSON.parse(storedUser));
-// } else {
-// // 设置默认用户(id: 1)
-// const defaultUser = { id: 1, name: '测试用户' };
-// localStorage.setItem('user', JSON.stringify(defaultUser));
-// setUser(defaultUser);
-// }
-// setLoading(false);
-// }, []);
-
-// const saveUser = (userData) => {
-// localStorage.setItem('user', JSON.stringify(userData));
-// setUser(userData);
-// };
-
-// const logout = () => {
-// localStorage.removeItem('user');
-// setUser(null);
-// };
-
-// return (
-// <UserContext.Provider value={{ user, loading, saveUser, logout }}>
-// {children}
-// </UserContext.Provider>
-// );
-// };
-
-// export const useUser = () => useContext(UserContext);
-
import React, { createContext, useContext, useState, useEffect } from 'react';
-// 创建上下文
-const UserContext = createContext();
+export const UserContext = createContext();
-// Provider 组件
export const UserProvider = ({ children }) => {
const [user, setUser] = useState(null);
const [loading, setLoading] = useState(true);
@@ -51,19 +9,29 @@
useEffect(() => {
const storedUser = localStorage.getItem('user');
if (storedUser) {
- setUser(JSON.parse(storedUser));
- } else {
- // 设置默认用户
- const defaultUser = { id: 1, name: '测试用户' };
- localStorage.setItem('user', JSON.stringify(defaultUser));
- setUser(defaultUser);
+ 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) => {
- localStorage.setItem('user', JSON.stringify(userData));
- setUser(userData);
+ if (userData && userData.id) {
+ localStorage.setItem('user', JSON.stringify(userData));
+ setUser(userData);
+ } else {
+ console.error('无效的用户数据:', userData);
+ }
};
const logout = () => {
@@ -71,17 +39,17 @@
setUser(null);
};
- // ✅ 加载完用户数据后再渲染子组件,避免子组件访问 null
- if (loading) {
- return <div>正在加载用户信息...</div>;
- }
-
return (
- <UserContext.Provider value={{ user, saveUser, logout }}>
+ <UserContext.Provider value={{ user, saveUser, logout, loading }}>
{children}
</UserContext.Provider>
);
};
-// 自定义 hook
-export const useUser = () => useContext(UserContext);
+export const useUser = () => {
+ const context = useContext(UserContext);
+ if (!context) {
+ throw new Error('useUser must be used within a UserProvider');
+ }
+ return context;
+};
\ No newline at end of file