Programming & Development / March 27, 2025

React Redux Example: A Simple Counter App

React Redux state management counter example React Redux useDispatch useSelector

Redux is a powerful state management library often used in React applications to manage complex states. In this tutorial, we will walk through setting up a basic counter application using React and Redux. You'll learn how to set up actions, reducers, and connect everything to a React component to handle state management.

Let's get started!

Step 1: Setup Your Project

First, make sure that you have the necessary dependencies installed. If you haven't already, you need to install React, Redux, and React-Redux.

Install React, Redux, and React-Redux:

bash

npm install react react-redux redux

Once the libraries are installed, you can start building the application.

Step 2: Create the Redux Store

1. Define Action Types

In Redux, actions are used to communicate changes to the store. We’ll define action types for the increment and decrement actions.

javascript

// src/actions/types.js
export const INCREMENT = 'INCREMENT';
export const DECREMENT = 'DECREMENT';

2. Create Action Creators

Next, we create action creators that return the corresponding actions when dispatched. These actions will trigger the changes in the state.

javascript

// src/actions/counterActions.js
import { INCREMENT, DECREMENT } from './types';

export const increment = () => ({
  type: INCREMENT
});

export const decrement = () => ({
  type: DECREMENT
});

3. Create the Reducer

The reducer handles the state changes based on the dispatched actions. In this case, we have a simple reducer that will modify the count in the state.

javascript

// src/reducers/counterReducer.js
import { INCREMENT, DECREMENT } from '../actions/types';

const initialState = {
  count: 0
};

const counterReducer = (state = initialState, action) => {
  switch(action.type) {
    case INCREMENT:
      return {
        ...state,
        count: state.count + 1
      };
    case DECREMENT:
      return {
        ...state,
        count: state.count - 1
      };
    default:
      return state;
  }
};

export default counterReducer;

4. Combine Reducers (Root Reducer)

If you have multiple reducers, you can combine them into one root reducer using combineReducers. In this case, we just have one reducer, so it’s straightforward.

javascript

// src/reducers/index.js
import { combineReducers } from 'redux';
import counterReducer from './counterReducer';

export default combineReducers({
  counter: counterReducer
});

5. Create the Redux Store

Now that we have the reducers set up, let’s create the Redux store using createStore from Redux.

javascript

// src/store.js
import { createStore } from 'redux';
import rootReducer from './reducers';

const store = createStore(rootReducer);

export default store;

Step 3: Set Up React Components

1. Create the Counter Component

The Counter component will display the count and allow the user to increment and decrement the value. We will use useSelector to access the Redux state and useDispatch to dispatch actions when the buttons are clicked.

javascript

// src/components/Counter.js
import React from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { increment, decrement } from '../actions/counterActions';

const Counter = () => {
  const count = useSelector(state => state.counter.count);
  const dispatch = useDispatch();

  return (
    <div>
      <h1>Count: {count}</h1>
      <button onClick={() => dispatch(increment())}>Increment</button>
      <button onClick={() => dispatch(decrement())}>Decrement</button>
    </div>
  );
};

export default Counter;

2. Create the Main App Component

In the main App component, we use the Provider component from react-redux to pass the Redux store to the rest of the app. This makes the Redux store available to all components inside the app.

javascript

// src/App.js
import React from 'react';
import { Provider } from 'react-redux';
import store from './store';
import Counter from './components/Counter';

const App = () => (
  <Provider store={store}>
    <div>
      <h1>React Redux Counter Example</h1>
      <Counter />
    </div>
  </Provider>
);

export default App;

Step 4: Entry Point

The entry point for the application is the index.js file, where we render the App component inside the root element.

javascript

// src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';

ReactDOM.render(<App />, document.getElementById('root'));

Step 5: Running the Application

Once all the code is in place, you can run the application using your preferred method. If you're using Create React App, you can simply run:

bash

npm start

Your browser will open with the basic counter application. You’ll be able to click Increment and Decrement to update the counter state using Redux!

Summary

In this tutorial, we learned how to integrate Redux with a React application to manage state. Here's a quick recap of what we covered:

  1. Action Types and Creators: Defining constants and actions that describe the changes in the state.
  2. Reducer: Writing a reducer that manages the state based on actions.
  3. Store: Creating a Redux store to hold the application’s state.
  4. React Components: Using useSelector to read state and useDispatch to dispatch actions.
  5. Connecting Redux to React: Using the Provider component to make the Redux store available throughout the app.

Redux is powerful, but it can be a bit complex for smaller apps. However, for larger applications where state management is key, Redux provides a clean and scalable solution.

Happy coding! Let me know if you need further assistance with Redux or React in general!


Comments

No comments yet

Add a new Comment

NUHMAN.COM

Information Technology website for Programming & Development, Web Design & UX/UI, Startups & Innovation, Gadgets & Consumer Tech, Cloud Computing & Enterprise Tech, Cybersecurity, Artificial Intelligence (AI) & Machine Learning (ML), Gaming Technology, Mobile Development, Tech News & Trends, Open Source & Linux, Data Science & Analytics

Categories

Tags

©{" "} Nuhmans.com . All Rights Reserved. Designed by{" "} HTML Codex