Getting Started

1.) Create new folder

example: features/locationSlice

2.) Add boilerplate files

Add three files: api.js , index.js, and state.js.

3.) Add initial state

Here, in the state.js, we are adding the initial state.

export const initialState = { value: { location: {} etc: {}, };

4.) Add createSlice()

Create your slice in the index.js page.

import { createSlice } from "@reduxjs/toolkit"; export const locationSlice = createSlice({ name: "location", initialState, reducers: { addLocation: (state, action) => { state.value.push(action.payload); }, deleteLocation: (state, action) => { state.value = state.value.filter((item) => item.id !== action.payload.id); }, }, extraReducers: { [getLocations.pending]: (state) => { state.loading = true; }, [getLocations.fulfilled]: (state, { payload }) => { state.loading = false; state.etc = payload; }, [getLocations.rejected]: (state) => { state.loading = false; state.error = true; state.errormessage = ""; }, }, });

5.) Create async thunk(for API logic)

Next, we are adding any API-related async thunks in the api.js page.

import { createAsyncThunk } from "@reduxjs/toolkit"; export const getLocations = createAsyncThunk( "steps/getLocations", async ({ id }, thunkAPI) => { const res = await fetch( `https://locationsAPI.com/${id}` ).then((data) => data.json()); return res; } );

 

Afterwards, update the index.js by importing the action, as well as updating the extraReducers.

Line 2 : Import the getLocations() action.

Line 15-27 : Update the index.js page in the extraReducers section with getLocations[pending], getLocations[fulfilled], and getLocations[rejected]

6.) Add the slice to Store