blob: d6200af0b2356da014eba41e5b8ce54fb117aba7 [file] [log] [blame]
22301014b1477f72025-06-07 22:54:40 +08001// src/store/userSlice.ts
2import { createSlice, createAsyncThunk, type PayloadAction } from '@reduxjs/toolkit';
3import type { UserInfo } from '../../api/User/type';
4import UserAPi from '../../api/User/UserApi';
5
6// 定义用户信息的类型
7interface UserState {
8 username: string;
9 userid: string;
10 email: string;
11 status: 'idle' | 'loading' | 'succeeded' | 'failed';
12 error: string | null;
13}
14
15// 定义初始状态
16const initialState: UserState = {
17 username: '',
18 userid: '',
19 email: '',
20 status: 'idle',
21 error: null,
22};
23
24
25// 创建异步 action,用于获取用户信息
26export const getUserInfo = createAsyncThunk<
27 UserInfo,
28 void,
29 {rejectValue:string}
30>(
31 'user/getUserInfo',
32 async (_, { rejectWithValue }) => {
33 const response = await UserAPi.getMe();
34 if (response.data.code == 0) {
35 console.log("xixi")
36 console.log(response)
37 return response.data.data;
38 } else {
39 console.log("buxixi")
40 console.log(response)
41 return rejectWithValue(response.data.message);
42 }
43 }
44);
45
46// 创建 userSlice
47const userSlice = createSlice({
48 name: 'user',
49 initialState,
50 reducers: {
51 // 可以在这里处理同步操作,如修改用户名等
52 setUser: (state, action: PayloadAction<string>) => {
53 state.username = action.payload;
54 },
55 },
56 extraReducers: (builder) => {
57 builder
58 .addCase(getUserInfo.pending, (state) => {
59 state.status = 'loading';
60 })
61 .addCase(getUserInfo.fulfilled, (state, action: PayloadAction<UserInfo>) => {
62 state.status = 'succeeded';
63 state.username = action.payload.username;
64 state.userid = action.payload.userid;
65 })
66 .addCase(getUserInfo.rejected, (state, action) => {
67 state.status = 'failed';
68 state.error = action.error.message ?? 'Unknown error';
69 });
70 },
71});
72
73// 导出 actions 和 reducer
74export const { setUser } = userSlice.actions;
75export default userSlice.reducer;