| import { createSlice, PayloadAction } from "@reduxjs/toolkit"; |
| import type { RootState } from "./store"; |
| |
| // Define a type for the slice state |
| interface appState { |
| value: number; |
| } |
| |
| // Define the initial state using that type |
| const initialState: appState = { |
| value: 0, |
| }; |
| |
| export const appSlice = createSlice({ |
| name: "app", |
| // `createSlice` will infer the state type from the `initialState` argument |
| initialState, |
| reducers: { |
| increment: (state) => { |
| state.value += 1; |
| }, |
| decrement: (state) => { |
| state.value -= 1; |
| }, |
| // Use the PayloadAction type to declare the contents of `action.payload` |
| incrementByAmount: (state, action: PayloadAction<number>) => { |
| state.value += action.payload; |
| }, |
| }, |
| }); |
| |
| export const { increment, decrement, incrementByAmount } = appSlice.actions; |
| |
| // Other code such as selectors can use the imported `RootState` type |
| export const selectCount = (state: RootState) => state.app.value; |
| |
| export default appSlice.reducer; |