blob: 69f73bd59d06acc3dfceb41a5e912572c7b74166 [file] [log] [blame]
Krishyaf1d0ea82025-05-03 17:01:58 +08001// import React, { createContext, useContext, useState, useEffect } from 'react';
2
3// const UserContext = createContext();
4
5// export const UserProvider = ({ children }) => {
6// const [user, setUser] = useState(null);
7// const [loading, setLoading] = useState(true);
8
9// useEffect(() => {
10// const storedUser = localStorage.getItem('user');
11// if (storedUser) {
12// setUser(JSON.parse(storedUser));
13// } else {
14// // 设置默认用户(id: 1)
15// const defaultUser = { id: 1, name: '测试用户' };
16// localStorage.setItem('user', JSON.stringify(defaultUser));
17// setUser(defaultUser);
18// }
19// setLoading(false);
20// }, []);
21
22// const saveUser = (userData) => {
23// localStorage.setItem('user', JSON.stringify(userData));
24// setUser(userData);
25// };
26
27// const logout = () => {
28// localStorage.removeItem('user');
29// setUser(null);
30// };
31
32// return (
33// <UserContext.Provider value={{ user, loading, saveUser, logout }}>
34// {children}
35// </UserContext.Provider>
36// );
37// };
38
39// export const useUser = () => useContext(UserContext);
40
Krishya75e43c02025-04-05 21:16:30 +080041import React, { createContext, useContext, useState, useEffect } from 'react';
42
Krishyaf1d0ea82025-05-03 17:01:58 +080043// 创建上下文
Krishya75e43c02025-04-05 21:16:30 +080044const UserContext = createContext();
45
Krishyaf1d0ea82025-05-03 17:01:58 +080046// Provider 组件
Krishya75e43c02025-04-05 21:16:30 +080047export const UserProvider = ({ children }) => {
48 const [user, setUser] = useState(null);
49 const [loading, setLoading] = useState(true);
50
Krishya75e43c02025-04-05 21:16:30 +080051 useEffect(() => {
52 const storedUser = localStorage.getItem('user');
53 if (storedUser) {
54 setUser(JSON.parse(storedUser));
22301009237217b2025-04-20 15:15:25 +080055 } else {
Krishyaf1d0ea82025-05-03 17:01:58 +080056 // 设置默认用户
22301009237217b2025-04-20 15:15:25 +080057 const defaultUser = { id: 1, name: '测试用户' };
58 localStorage.setItem('user', JSON.stringify(defaultUser));
59 setUser(defaultUser);
Krishya75e43c02025-04-05 21:16:30 +080060 }
61 setLoading(false);
62 }, []);
63
Krishya75e43c02025-04-05 21:16:30 +080064 const saveUser = (userData) => {
65 localStorage.setItem('user', JSON.stringify(userData));
66 setUser(userData);
67 };
68
Krishya75e43c02025-04-05 21:16:30 +080069 const logout = () => {
70 localStorage.removeItem('user');
71 setUser(null);
72 };
73
Krishyaf1d0ea82025-05-03 17:01:58 +080074 // ✅ 加载完用户数据后再渲染子组件,避免子组件访问 null
75 if (loading) {
76 return <div>正在加载用户信息...</div>;
77 }
78
Krishya75e43c02025-04-05 21:16:30 +080079 return (
Krishyaf1d0ea82025-05-03 17:01:58 +080080 <UserContext.Provider value={{ user, saveUser, logout }}>
Krishya75e43c02025-04-05 21:16:30 +080081 {children}
82 </UserContext.Provider>
83 );
84};
85
Krishyaf1d0ea82025-05-03 17:01:58 +080086// 自定义 hook
22301009237217b2025-04-20 15:15:25 +080087export const useUser = () => useContext(UserContext);