React With Redux Toolkit
- Mohammad Abu Mattar
- Frontend
- 02 Dec, 2022
- 06 Mins read
Prerequisites
This post assumes that you have a basic understanding of React and Redux. and it will be better if you have some experience with React Hooks like useReducer
.
Introduction
Nowadays, we have a lot of state management libraries for React, such as Redux, MobX, and Recoil. In this post, we will learn how to use Redux Toolkit to manage the state of our React application.
What is Redux?
Redux is a predictable state container for JavaScript apps. It helps you write applications that behave consistently, run in different environments (client, server, and native), and are easy to test. On top of that, it provides a great developer experience, such as live code editing combined with a time traveling debugger.
What is Redux Toolkit?
Redux Toolkit is the official, opinionated, batteries-included toolset for efficient Redux development. It is intended to be the standard way to write Redux logic.
It was originally created to help address three common concerns about Redux:
- Configuring a Redux store is too complicated.
- I have to add a lot of packages to get Redux to do anything useful.
- Redux requires too much boilerplate code.
Why Redux Toolkit?
Redux Toolkit is a package that contains a set of tools to help you write Redux logic more easily. It is not a Redux replacement, but it is an alternative to writing Redux logic by hand.
Installation
Step 1: Initialize a React project using vite
First, we need to initialize a React project using vite.
Note: You can use
npm
,yarn
,pnpm
, ornpx
to initialize a React project using vite.
Note: You can use
typescript
instead ofjavascript
to initialize a React project using vite.
Step 2: Go to the project directory
Step 3: Install Basic Dependencies
Step 4: Install Redux Toolkit
Usage
Step 1: Remove the unnecessary files
We will remove the unnecessary files, or we can say that we will clean up src
directory.
Explanation:
rm
- remove files or directories-rf
- remove directories and their contents recursively
Step 2: Create the Basic Structure
Step 2.1: Create the Folders and Files
We will create the basic structure of our project.
Step 2.2: Create the App.jsx
file
We will create the App.jsx
file.
Step 2.3: Create the main.jsx
file
We will create the main.jsx
file.
Step 3: Create the Store
Step 3.1: Create the store.js
file
We will create the store.js
file.
As you can see, we have imported the configureStore
function from @reduxjs/toolkit
and we have created the store using the configureStore
function.
Explanation:
import { configureStore } from '@reduxjs/toolkit'
- import the configureStore functionconst store = configureStore({ reducer: {} })
- create the store using the configureStore functionexport default store
- export the store
Note: We will add the reducer later.
After that we will do some changes to the main.jsx file.
You’ll notice that we have wrapped the App component with the Provider
component after importing it from the react-redux
library. Additionally, the store from ./app/store
was imported. To the Provider
component, we have passed the store
.
Explanation:
import { Provider } from 'react-redux'
- import the Provider componentimport store from './app/store'
- import the store<Provider store={store}>
- pass the store to the Provider component
Step 4: Create the counterSlice.js
file
We will create the counterSlice.js
file.
The createSlice
function is used to create a slice of the store. We have passed the name of the slice as counter
. We have passed the initial state of the slice as initialState
. We have passed the reducers as an object. We have passed the increment
, decrement
, reset
, and incrementByAmount
reducers. We have exported the increment
, decrement
, and incrementByAmount
actions. We have exported the reducer.
Explanation:
import { createSlice } from '@reduxjs/toolkit'
- import the createSlice functionconst initialState = { count: 0 }
- define the initial state of the sliceconst counterSlice = createSlice({ name: 'counter', initialState, reducers: { increment: (state) => { state.count += 1 }, decrement: (state) => { state.count -= 1 }, reset: (state) => { state.count = 0 }, incrementByAmount: (state, action) => { state.count += action.payload }, } })
- create the slice of the storeexport const { increment, decrement, reset, incrementByAmount } = counterSlice.actions
- export the actionsexport default counterSlice.reducer
- export the reducer
Step 5: Add the counterSlice
reducer to the store
We will add the counterSlice
reducer to the store.
Now after adding the counterSlice
reducer to the store, it will be available in the entire application.
Explanation:
import counterReducer from '../components/Counter/counterSlice'
- import the counterSlice reducerreducer: { counter: counterReducer }
- add the counterSlice reducer to the store
Step 6: Add the Counter Component to the App Component
We will add the Counter Component to the App Component.
As you can see, we have imported the useSelector
hook from react-redux
. We have imported the useDispatch
hook from react-redux
. We have imported the increment
, decrement
, reset
, and incrementByAmount
actions from ./counterSlice
. We have used the useSelector
hook to get the count from the store. We have used the useDispatch
hook to dispatch the actions. We have used the increment
, decrement
, reset
, and incrementByAmount
actions to dispatch the actions.
Explanation:
import { useSelector, useDispatch } from 'react-redux'
- import the useSelector hook and the useDispatch hookimport { increment, decrement, incrementByAmount } from './counterSlice'
- import the actionsconst count = useSelector((state) => state.counter.count)
- get the count from the storeconst dispatch = useDispatch()
- get the dispatch functiononClick={() => dispatch(increment())}
- dispatch the increment actiononClick={() => dispatch(decrement())}
- dispatch the decrement actiononClick={() => dispatch(reset())}
- dispatch the reset actiononClick={() => dispatch(incrementByAmount(5))}
- dispatch the incrementByAmount action
Step 7: Add the Counter Component to the App Component
We will add the Counter Component to the App Component.
As you can see, we have imported the Counter Component. We have added the Counter Component to the App Component.
Explanation:
import Counter from './components/Counter/Counter'
- import the Counter Component<Counter />
- add the Counter Component to the App Component
Step 8: Run the application
We will run the application.
As you can see, we have a counter. We can increment the counter. We can decrement the counter. We can increment the counter by 5.
Step 9: Access count
value in other components
We will access the count
value in other components, for example, in the Header
component.
As you can see, we have imported the useSelector
hook from react-redux
. We have used the useSelector
hook to get the count
value from the store. We have added the count
value to the Header
component.
Explanation:
import { useSelector } from 'react-redux'
- import the useSelector hookconst count = useSelector((state) => state.counter.count)
- get the count from the store<p>Count: {count}</p>
- add the count to the Header component
Step 10: Add the Header Component to the App Component
We will add the Header Component to the App Component.
As you can see, we have imported the Header Component. We have added the Header Component to the App Component.
Explanation:
import Header from './components/Header/Header'
- import the Header Component<Header />
- add the Header Component to the App Component
Step 11: Run the application
We will run the application.
As you can see, we have a counter. We can increment the counter. We can decrement the counter. We can increment the counter by 5. We have a header with the count value.
Source Code
You can find the source code for this tutorial on GitHub. You can clone the repository and run the application.
Conclusion
In this article, we learned how to establish a Redux store using the Redux Toolkit. A Redux slice can now be made, as we have learned. We now know how to take an action. We now know how to build reducers. We now know how to build a Redux store. The Redux store may now be added to the App Component, as we learned how to do. We now know how to add the Counter Component to the App Component. Accessing the count
value in other components is something we now know how to do. We have learned how to add the Header Component to the App Component.