diff options
Diffstat (limited to 'src/features/counter/counterSlice.js')
-rw-r--r-- | src/features/counter/counterSlice.js | 68 |
1 files changed, 10 insertions, 58 deletions
diff --git a/src/features/counter/counterSlice.js b/src/features/counter/counterSlice.js index a9441ac..4cb9993 100644 --- a/src/features/counter/counterSlice.js +++ b/src/features/counter/counterSlice.js @@ -1,29 +1,10 @@ -import { createAsyncThunk, createSlice } from "@reduxjs/toolkit"; -import { fetchCount } from "./counterAPI"; - -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; - } -); +import { createSlice } from '@reduxjs/toolkit' export const counterSlice = createSlice({ - name: "counter", - initialState, - // The `reducers` field lets us define reducers and generate associated actions + name: 'counter', + initialState: { + value: 0, + }, reducers: { increment: (state) => { // Redux Toolkit allows us to write "mutating" logic in reducers. It @@ -34,40 +15,11 @@ export const counterSlice = createSlice({ }, decrement: (state) => { state.value -= 1; - }, - // Use the PayloadAction type to declare the contents of `action.payload` - incrementByAmount: (state, action) => { - state.value += action.payload; - }, - }, - // 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; - }); + } }, -}); - -export const { increment, decrement, incrementByAmount } = counterSlice.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)` -export const selectCount = (state) => state.counter.value; +}) -// 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)); - } -}; +// Action creators are generated for each case reducer function +export const { increment, decrement } = counterSlice.actions -export default counterSlice.reducer; +export default counterSlice.reducer |