Setting up a Redux project is a crucial step in mastering state management in React. Redux is a predictable state container for JavaScript apps, and it helps manage state in an efficient and scalable way. In this section, we will walk through the process of setting up a Redux project from scratch, ensuring you have a solid foundation to build upon.

Before diving into the setup process, let's ensure that you have the necessary tools installed. Make sure you have Node.js and npm (Node Package Manager) installed on your machine. You can verify this by running node -v and npm -v in your terminal. If you don't have them installed, visit the Node.js website to download and install the latest version.

Step 1: Setting Up a New React Project

To begin, we'll create a new React project using Create React App, a boilerplate provided by Facebook to streamline the setup of a React application. Open your terminal and run the following command:

npx create-react-app my-redux-app

This command will create a new directory named my-redux-app with all the necessary files and dependencies to start a React application. Once the setup is complete, navigate into the project directory:

cd my-redux-app

Step 2: Installing Redux and React-Redux

With the React app set up, the next step is to install Redux and React-Redux. Redux is the core library for state management, while React-Redux is the official React binding for Redux, which allows React components to interact with the Redux store.

Run the following command to install these packages:

npm install redux react-redux

This command will add Redux and React-Redux to your project's dependencies, enabling you to use Redux for state management in your React application.

Step 3: Creating the Redux Store

The Redux store is a centralized state container for your application. It holds the application's state and allows components to access and update it. To create a Redux store, follow these steps:

  1. Create a new directory named redux inside the src folder of your project. This directory will contain all the Redux-related files.
  2. Inside the redux directory, create a file named store.js. This file will be responsible for setting up the Redux store.

Open store.js and add the following code:

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

const store = createStore(rootReducer);

export default store;

In this snippet, we import the createStore function from Redux and a root reducer from a file we'll create next. The createStore function initializes the Redux store with the provided reducer.

Step 4: Creating Reducers

Reducers are pure functions that determine how the application's state changes in response to actions. They take the current state and an action as arguments and return a new state.

Inside the redux directory, create a new directory named reducers. This directory will contain all the reducers for your application.

Create a file named index.js inside the reducers directory. This file will serve as the root reducer, combining all individual reducers. Add the following code to index.js:

import { combineReducers } from 'redux';
import exampleReducer from './exampleReducer';

const rootReducer = combineReducers({
  example: exampleReducer,
});

export default rootReducer;

In this code, we use the combineReducers function to combine multiple reducers into a single root reducer. For now, we have a placeholder reducer named exampleReducer, which we'll create next.

Create a file named exampleReducer.js inside the reducers directory. Add the following code to define a simple reducer:

const initialState = {
  value: 0,
};

function exampleReducer(state = initialState, action) {
  switch (action.type) {
    case 'INCREMENT':
      return { ...state, value: state.value + 1 };
    case 'DECREMENT':
      return { ...state, value: state.value - 1 };
    default:
      return state;
  }
}

export default exampleReducer;

This reducer manages a simple state with a single property, value. It handles two actions: INCREMENT and DECREMENT, updating the state accordingly.

Step 5: Providing the Store to the React Application

Now that we have a Redux store and reducers set up, the next step is to provide the store to the React application. This is done using the Provider component from React-Redux, which makes the Redux store available to all components in the application.

Open the src/index.js file and wrap the <App /> component with the Provider component:

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

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

By wrapping the <App /> component with <Provider>, we ensure that the entire application has access to the Redux store.

Step 6: Connecting React Components to the Redux Store

With the store provided to the application, we can now connect React components to the Redux store using the connect function from React-Redux. This function allows components to access the state and dispatch actions.

Let's create a simple component that interacts with the Redux store. Create a new file named Counter.js inside the src directory and add the following code:

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

function Counter({ value, increment, decrement }) {
  return (
    <div>
      <h1>Counter: {value}</h1>
      <button onClick={increment}>Increment</button>
      <button onClick={decrement}>Decrement</button>
    </div>
  );
}

const mapStateToProps = (state) => ({
  value: state.example.value,
});

const mapDispatchToProps = (dispatch) => ({
  increment: () => dispatch({ type: 'INCREMENT' }),
  decrement: () => dispatch({ type: 'DECREMENT' }),
});

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

In this component, we use the connect function to map the Redux state and dispatch functions to the component's props. The mapStateToProps function extracts the value from the Redux state, while mapDispatchToProps provides functions to dispatch INCREMENT and DECREMENT actions.

Finally, import and use the Counter component in App.js:

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

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

export default App;

With these steps completed, you now have a fully functional Redux setup in your React application. The Counter component interacts with the Redux store, demonstrating how state management can be handled efficiently using Redux.

As you continue to build more complex applications, you can expand on this setup by adding more reducers, actions, and components. Redux provides a scalable and predictable way to manage state, making it an essential tool for any advanced React developer. Remember to keep your reducers pure and leverage middleware like Redux Thunk or Redux Saga for handling asynchronous operations.

In the next sections, we'll delve deeper into advanced topics such as middleware, asynchronous actions, and best practices for structuring Redux applications. By mastering these concepts, you'll be well-equipped to tackle any state management challenges in your React projects.

Now answer the exercise about the content:

What is the purpose of using the `Provider` component from React-Redux in a Redux setup for a React application?

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

You missed! Try again.

Article image Setting Up a Redux Project: Choosing the Right Project Structure for Redux

Next page of the Free Ebook:

5Setting Up a Redux Project: Choosing the Right Project Structure for Redux

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