-
Notifications
You must be signed in to change notification settings - Fork 0
/
userSlice.js
90 lines (71 loc) · 2.89 KB
/
userSlice.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import { createSlice } from '@reduxjs/toolkit';
// import { fetchCount } from './counter/counterAPI';
export const userSlice = createSlice({
name: "user",
initialState: {
user: null,
},
// The `reducers` field lets us define reducers and generate associated actions
reducers: {
// /*increment: (state) => */
// Redux Toolkit allows us to write "mutating" logic in reducers. It
// doesn't actually mutate the state because it uses the Immer library,
// which detects changes to a "draft state" and produces a brand new
// immutable state based off those changes
login: (state, action) => {
state.user = action.payload;
},
logout: (state) => {
state.user += null;
},
},
});
export const { login, logout } = userSlice.actions;
// The function below is called a selector and allows us to select a value from
// the state. Selectors can also be defined inline where they're used instead of
// in the slice file. For example: `useSelector((state: RootState) => state.counter.value)`
//Selectors, to pull the user from the data fow
export const selectUser = state => state.user.user;
export default userSlice.reducer;
// // We can also write thunks by hand, which may contain both sync and async logic.
// // Here's an example of conditionally dispatching actions based on current state.
// export const incrementIfOdd = (amount) => (dispatch, getState) => {
// const currentValue = selectCount(getState());
// if (currentValue % 2 === 1) {
// dispatch(incrementByAmount(amount));
// }
// };
// // The `extraReducers` field lets the slice handle actions defined elsewhere,
// // including actions generated by createAsyncThunk or in other slices.
// extraReducers: (builder) => {
// builder
// .addCase(incrementAsync.pending, (state) => {
// state.status = 'loading';
// })
// .addCase(incrementAsync.fulfilled, (state, action) => {
// state.status = 'idle';
// state.value += action.payload;
// });
// },
// const initialState = {
// value: 0,
// status: 'idle',
// };
// // The function below is called a thunk and allows us to perform async logic. It
// // can be dispatched like a regular action: `dispatch(incrementAsync(10))`. This
// // will call the thunk with the `dispatch` function as the first argument. Async
// // code can then be executed and other actions can be dispatched. Thunks are
// // typically used to make async requests.
// export const incrementAsync = createAsyncThunk(
// 'counter/fetchCount',
// async (amount) => {
// const response = await fetchCount(amount);
// // The value we return becomes the `fulfilled` action payload
// return response.data;
// }
// );
// },
// // Use the PayloadAction type to declare the contents of `action.payload`
// incrementByAmount: (state, action) => {
// state.value += action.payload;
// },