Blog

Redux Toolkit

redux toolkit.webp

For a more enjoyable experience on this blog, I suggest that you have the following prerequisites:

  • A basic understanding of React hooks.
  • Familiarity with mutating objects in Javascript
  • Fundamental knowledge of Typescript.
  • Installation of the Redux Devtools extension on browser.

Let’s get started!

I. What is Redux Toolkit?

Redux Toolkit is a powerful package developed by the Redux team to simplify the usage of Redux, speed up development, and promote a standardized approach to writing Redux logic.

It aims to address common challenges developers face, including:

  • The complexity of configuring a store.
  • The need to include numerous packages such as middleware, selectors, etc.
  • The excessive boilerplate code that Redux often demands.

Redux Toolkit comprises several small packages:

  • Redux: The core of state management.
  • ImmerJs: Simplifies working with immutable state.
  • RTK Query: A powerful tool for fetching and caching data.

Before delving into Redux Toolkit, it’s beneficial if you have prior knowledge with Redux. If you’re already family with Redux and its core concept, feel free to skip this section. However, for those who need a fresher, I’ve prepared a brief overview of Redux.

1. What is Redux?

Redux is a pattern and library for managing the state of an application in a more organized and predictable way. With Redux, the entire state of an application is managed within a single immutable object. Every update to the Redux state results in a new copy of the state, plush the new changes.

In the past, without Redux, our data would be tied to individual components, necessitating the passing of data through every level of components.

What is Redux

2. How does Redux work?

Redux includes 4 core components:

  • Store 
  • Actions
  • Dispatch
  • Reducers

Let’s explore the role of each component.

How does Redux workThe Store: The central repository of the application's state. It contains the entire state tree, providing a comprehensive snapshot of application’s data.

Actions: Used to send data from an application to the Redux store. An action is an object with two properties: type and payload (optional). The type property describes the action and is generally an uppercase string. The payload is additional data that we want to pass along with the action.

Dispatch: Function that allows sending an action to update the state of application. When calling dispatch, the store runs an action through all of the available reducers, which in turn update the state accordingly.

Reducers: These functions that specify how the application's state changes in response to actions. Reducers take two params: state and an action, and return a new state. They are pure functions and should not modify the state directly.

I hope that you are already familiar with Redux and its core concepts above. Let's take a look at these images below, where I compare code without using Redux Toolkit and with Redux Toolkit.

createStore:

createStore1

createStore2

createReducer:

createReducer1

createReducer2

createAction:

createAction1

createAction2

You may notice that Redux can sometimes become rather verbose. This verbosity stems from the need to go through multiple steps in creating a comprehensive Redux store, resulting in the generation of numerous files containing repetitive code. Furthermore, Redux lacks a clear standard for structuring logic, and in some cases, we find ourselves having to install additional libraries like middleware, selectors, etc. to effectively manage state logic.

This is why Redux Toolkit was developed to address many of the issues mentioned above.

II. How does Redux Toolkit work?

Step 1: Setting up an application

1. Start by creating a new React project with Typescript using the following command in the terminal.

npx create-react-app blog --template typescript   

cd blog
yarn add -D prettier eslint-plugin-prettier eslint-congig-prettier

2. Open package.json file for configuration (line 6 - 10)

Open package.json

3. Create .prettierrc file in the blog directory

Create .prettierrc file

4. Create .eslintrc file in the blog directory

Create .eslintrc file

5. Create .editorconfig file in the blog directory

Create .editorconfig file

6. Open tsconfig.json (line 18)

Open tsconfig.json

7. Install Tailwinds CSS:

yarn add tailwindcss postcss autoprefixer 

npx tailwindcss init -p

Open tailwind.config.js file

Open tailwind.config.js file

8. Open index.css in the blog/src/ directory

Open index.css

9. Remove any unnecessary folders or files. The source code structure should look like this.

Remove any unnecessary folders or files

10. Finally,  run 

yarn start

Step 2: How to install Redux Toolkit and React Redux

yarn add @reduxjs/toolkit react-redux

Step 3: How to create a Redux store

1. Create a new directory named redux to contain Redux related files. Inside redux directory, create a new file called store.ts

Create a new directory named redux

2. Create a new file blog.reducer.ts

Create a new file blog.reducer.ts

3. Open index.tsx add store into Provider

Open index.tsxThen open Redux DevTool to see data tree

open Redux DevTool

4. Render blog data into UI

Create blog components into components and pages directory

Create blog components

Then import Blog component into App.tsx

import Blog component into App.tsx

Use useSelector to get blog data from store

Use useSelector

Step 4: How to use with createAction

createAction: It’s a helper function  for define a Redux action type and creator

function createAction(type, prepareAction?)

1. Open blog.reducer.ts file and create action

Open blog.reducer.ts file

2. Open CreateBlog.tsx file to dispatch action

Open CreateBlog.tsx file

3. Open BlogList.tsx file dispatch action

Open BlogList.tsx file

Step 5:  How to use with createSlice 

  • createSlice: It’s a function that deals with everything needed for each slice, as you have readed createAction and createReducer above. It is accessible within the scope of the specific slice function.
  • createSlice contains:
  • name: A parameter that will be the prefix for all of action types
  • initialState: The initial values for reducer
  • reducers: This is an object in which the keys become action type strings, and the corresponding values are functions acting as reducers. These reducers will be executed when the associated action type is dispatched.

Rename blog.reducer.ts to blog.slice.ts, convert createAction and createReducer  to createSlice

Rename blog.reducer.ts to blog.slice.tsThis application is not integrated with an API. If the application requires APIs integration, I suggest that you should research more about creating createAsyncThunk and RTK Query. Remember that this is a basic example, and as your application grows, you can continue to add more slices, actions, and components to your Redux store.

Show source demo:

I will show you the small react application using Redux Toolkit to manage state.

III. Conclusion

Redux Toolkit is a powerful tool. It streamlines the process of setting  Redux, reduces boilerplate code, and provides clear structure for managing actions, reducers and selectors. The integration of Immer for immutable state updates simplifies complex state modifications, making our code more readable and maintainable.

Now, should we use Redux Toolkit for our application? Based on my experience, I strongly recommend it. Because Redux Toolkit addresses many of the pain points when developers working with Redux. It helps developers make the stage management process smoother and more enjoyable. Incase that you’re starting a new project or refactoring an existing one, Redux Toolkit can save your time and effort, allowing you to focus on building features rather than wrestling with Redux setup.

So, go ahead, give it a try and watch your Redux become clearer, more manageable, and ultimately more enjoyable to work with.

Happy coding!

The end

Resources

Demo source code: https://github.com/saigontechnology/Blog-Resources/tree/main/React/yen.ka/basic-redux-toolkit

Follow our newsletter. Master every day with deep insights into software development from the experts at Saigon Technology!

Content Manager

Thanh (Bruce) Pham CEO of Saigon Technology

A Member of Forbes Technology Council

Table of Contents

Want to start a project?

Our team is ready to implement your ideas. Contact us now to discuss your roadmap!

get in touch

As a Leading Vietnam Software Development Outsourcing Company, we dedicate to your success by following our philosophy:

YOUR SUCCESS IS OUR MISSION.

about-us

Contact Us