Introduction to React-Redux using Hooks (useSelector && useDispatch)

Table of Contents

React-Redux is a library that provides a way to manage state in React applications by integrating Redux, a predictable state container, with React components. With the introduction of hooks in React, React-Redux offers hooks like useSelector and useDispatch to simplify state management and actions in functional components. In this article, we will explore how to use useSelector and useDispatch to leverage the power of React-Redux in your application.

Prerequisites

Before diving into React-Redux and its hooks, make sure you have a basic understanding of React and Redux. Familiarity with React components, hooks, and Redux concepts like store, actions, and reducers will be beneficial.

Setting up the Project

To follow along with the examples, you’ll need to set up a basic React project with Redux. Start by creating a new React project using Create React App or any other preferred method. Once the project is set up, install the necessary dependencies by running the following command in your project’s directory:

npm install react-redux redux

Configuring Redux Store

In a typical Redux setup, you need to create a Redux store that holds the application state. Create a new file named store.js in your project’s directory and add the following code:

import { createStore } from 'redux';

// Define initial state
const initialState = {
  count: 0,
};

// Define reducer function
const reducer = (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;
  }
};

// Create Redux store
const store = createStore(reducer);

export default store;

In this code snippet, we define an initial state object that contains a count property. The reducer function receives the current state and an action, and based on the action type, it updates the state accordingly. Finally, we create the Redux store using createStore from Redux and export it.

Connecting Redux Store to React

To connect the Redux store to our React application, we need to wrap our component tree with the Provider component from React-Redux. Open the index.js file in your project’s src directory and update the code as follows:

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

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

Here, we import the Provider component from react-redux and pass our Redux store as a prop. Wrapping the App component with the Provider component allows all child components to access the Redux store.

Using useSelector Hook

The useSelector hook is used to extract data from the Redux store in functional components. It accepts a selector function that takes the entire Redux state as an argument and returns the desired data. The component will re-render whenever the selected data changes. Let’s see an example of how to use useSelector in a component.

Create a new file named Counter.js in your src directory and add the following code:

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

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

  return (
    <div>
      <h1>Count: {count}</h1>
    </div>
  );
};

export default Counter;

In this example, we import the useSelector hook from react-redux and use it to select the count property from the Redux store’s state. The count value will be updated automatically whenever it changes in the store.

Using useDispatch Hook

The useDispatch hook is used to dispatch actions to update the Redux store from functional components. It returns a reference to the dispatch function provided by the Redux store. Let’s see an example of how to use useDispatch in a component.

Update the Counter.js file with the following code:

import React from 'react';
import { useSelector, useDispatch } from 'react-redux';

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

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

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

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

export default Counter;

In this updated example, we import the useDispatch hook from react-redux and use it to get a reference to the dispatch function. We define two functions, increment and decrement, which dispatch actions of type 'INCREMENT' and 'DECREMENT' respectively when the corresponding buttons are clicked. These actions will trigger the state updates in the Redux store.

Incorporating the Counter Component

To incorporate the Counter component into our app, update the App.js file with the following code:

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

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

export default App;

In this updated App.js file, we import and render the Counter component. The counter component will display the current count from the Redux store and provide buttons to increment and decrement the count.

Testing the React-Redux Integration

Save all the changes and start your React development server by running the following command in your project’s directory:

<code>npm start

Open your web browser and navigate to http://localhost:3000. You should see the React-Redux Counter Example with the initial count value displayed. Clicking the “Increment” and “Decrement” buttons should update the count accordingly, reflecting the state changes managed by Redux.

Conclusion

In this article, we explored the basics of using React-Redux with hooks in a React application. We configured the Redux store, connected it to our React app using the Provider component, and utilized the useSelector and useDispatch hooks for state selection and dispatching actions, respectively.

React-Redux hooks provide a simplified and efficient way to integrate Redux into functional components, reducing the boilerplate code and enhancing the readability of our codebase. By following the examples and guidelines presented in this article, you can harness the power of React-Redux hooks to effectively manage state in your React applications.

Command PATH Security in Go

Command PATH Security in Go

In the realm of software development, security is paramount. Whether you’re building a small utility or a large-scale application, ensuring that your code is robust

Read More »
Undefined vs Null in JavaScript

Undefined vs Null in JavaScript

JavaScript, as a dynamically-typed language, provides two distinct primitive values to represent the absence of a meaningful value: undefined and null. Although they might seem

Read More »