Setting up a Redux project with Create React App (CRA) is a streamlined process that allows developers to quickly get started with state management in React applications. Redux is a predictable state container for JavaScript apps, and when combined with React, it provides a powerful way to manage application state, especially in large-scale applications where state management can become complex.

Before diving into the setup process, it's important to have a basic understanding of what Redux is and why it's beneficial. Redux centralizes your application's state in a single store, making it easier to manage and debug. It follows a unidirectional data flow where the state is read-only and can only be changed by dispatching actions. These actions are processed by reducers, which are pure functions that take the current state and an action as arguments and return a new state.

To begin setting up Redux with Create React App, ensure you have Node.js and npm installed on your machine. Create React App is a tool that simplifies the process of setting up a new React project with sensible defaults and a modern build setup.

Step 1: Create a New React Application

Open your terminal and run the following command to create a new React application:

npx create-react-app my-redux-app

This command will generate a new React project in a directory called my-redux-app. It includes a basic project structure with a few sample files and configurations.

Step 2: Install Redux and React-Redux

Once the project is set up, navigate into the project directory:

cd my-redux-app

Next, install Redux and React-Redux, which is the official React binding for Redux:

npm install redux react-redux

The redux package provides the core Redux library, while react-redux contains bindings that allow React components to interact with the Redux store.

Step 3: Set Up the Redux Store

In Redux, the store is the central location for all application state. To set up the store, create a new directory called store inside the src folder, and within it, create a file named index.js.

mkdir src/store
touch src/store/index.js

Inside src/store/index.js, import the necessary functions from Redux and create the store:

import { createStore } from 'redux';

// Define initial state
const initialState = {};

// Define a reducer
const rootReducer = (state = initialState, action) => {
  switch (action.type) {
    case 'ACTION_TYPE':
      return {
        ...state,
        // Update state based on action
      };
    default:
      return state;
  }
};

// Create the Redux store
const store = createStore(rootReducer);

export default store;

In this example, we define an initial state and a simple reducer function named rootReducer. The reducer listens for actions and updates the state accordingly. The createStore function from Redux is used to create the store, passing in the reducer.

Step 4: Provide the Store to Your React Application

To make the Redux store available to your React components, wrap your application in a Provider component from react-redux. This step allows any component within the app to connect to the Redux store.

Open src/index.js and modify it as follows:

import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import store from './store';
import App from './App';
import './index.css';

ReactDOM.render(
  <React.StrictMode>
    <Provider store={store}>
      <App />
    </Provider>
  </React.StrictMode>,
  document.getElementById('root')
);

By wrapping the <App /> component with <Provider store={store}>, the store is now accessible throughout the component tree.

Step 5: Connect React Components to the Store

With the store provided to the application, components can now connect to it to access state and dispatch actions. The connect function from react-redux is used to link components to the Redux store.

For demonstration, let's create a simple counter component that increments and decrements a count value stored in the Redux state.

First, create a new component file Counter.js inside the src directory:

touch src/Counter.js

Inside Counter.js, implement the counter component:

import React from 'react';
import { connect } from 'react-redux';

// Define action types
const INCREMENT = 'INCREMENT';
const DECREMENT = 'DECREMENT';

// Define action creators
const increment = () => ({ type: INCREMENT });
const decrement = () => ({ type: DECREMENT });

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

const mapStateToProps = state => ({
  count: state.count
});

const mapDispatchToProps = {
  increment,
  decrement
};

export default connect(mapStateToProps, mapDispatchToProps)(Counter);

In this component, we define two action types: INCREMENT and DECREMENT. We also create action creators for each action type. The Counter component receives the current count and the action creators as props, which it uses to render the current count and buttons to dispatch actions.

The mapStateToProps function maps the Redux state to the component's props, allowing the component to access the current count value. The mapDispatchToProps object maps the action creators to the component's props, enabling the component to dispatch actions.

Step 6: Update the Reducer

To handle the actions dispatched by the Counter component, update the reducer in src/store/index.js:

const initialState = {
  count: 0
};

const rootReducer = (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;
  }
};

In this updated reducer, we handle the INCREMENT and DECREMENT actions, updating the count value in the state accordingly.

Step 7: Render the Counter Component

Finally, render the Counter component in the App.js file:

import React from 'react';
import Counter from './Counter';

function App() {
  return (
    <div className="App">
      <Counter />
    </div>
  );
}

export default App;

With these steps, you've successfully set up a Redux project using Create React App. The Counter component is connected to the Redux store, allowing it to access and update the application's state through actions and reducers.

As your application grows, you can expand this setup by adding more reducers, actions, and components. Redux provides a scalable architecture that makes it easier to manage complex state logic, ensuring your application remains maintainable and easy to debug.

In conclusion, integrating Redux with Create React App involves setting up the Redux store, providing it to the React application, and connecting components to the store. This approach offers a robust solution for managing state in React applications, especially when dealing with large and complex state interactions.

Now answer the exercise about the content:

What is the primary benefit of centralizing the application's state in a single store when using Redux with React?

You are right! Congratulations, now go to the next page

You missed! Try again.

Article image Setting Up a Redux Project: Creating a Custom Redux Starter Template

Next page of the Free Ebook:

15Setting Up a Redux Project: Creating a Custom Redux Starter Template

9 minutes

Obtenez votre certificat pour ce cours gratuitement ! en téléchargeant lapplication Cursa et en lisant lebook qui sy trouve. Disponible sur Google Play ou App Store !

Get it on Google Play Get it on App Store

+ 6.5 million
students

Free and Valid
Certificate with QR Code

48 thousand free
exercises

4.8/5 rating in
app stores

Free courses in
video, audio and text