How to Debug Redux in React

Debugging state management in React applications can be challenging, but mastering Redux debugging tools makes the process seamless. This article provides a straightforward guide on how to debug Redux in React using Redux DevTools, logging middleware like Redux Logger, and strategic code-level debugging to inspect state changes and track dispatched actions in real time.

1. Use Redux DevTools Extension

The Redux DevTools Extension is the most powerful tool for debugging Redux. It allows you to inspect every action, see the state diff after each action, and even “time travel” by rewinding or fast-forwarding actions.

Step 1: Install the Browser Extension

Download and install the Redux DevTools extension for your preferred browser (Chrome, Firefox, Safari, or Edge).

Step 2: Configure Redux in Your Code

If you are using Redux Toolkit (the modern standard), Redux DevTools is enabled automatically. You do not need any additional configuration.

If you are using legacy Redux, you must configure the store to connect with the extension. Update your store creation file as follows:

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

const store = createStore(
  rootReducer,
  window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
);

export default store;

Step 3: Inspect State and Actions

Open your browser’s Developer Tools (F12) and navigate to the Redux tab. Here, you can utilize key features: * Action Tab: View the payload of every action dispatched to the store. * State Tab: Inspect the entire state tree at any given moment. * Diff Tab: See exactly what changed in the state after a specific action ran. * Time Travel: Click the “Jump” button next to any past action to revert the application state back to that specific point in time.


2. Implement Redux Logger Middleware

Redux Logger is a middleware that logs every action and the resulting state directly to your browser’s console. It is highly beneficial for developers who prefer console-based debugging.

Step 1: Install Redux Logger

Run the following command in your terminal:

npm install redux-logger
# or
yarn add redux-logger

Step 2: Add Logger to the Store

For Redux Toolkit, configure the middleware in configureStore:

import { configureStore } from '@reduxjs/toolkit';
import logger from 'redux-logger';
import rootReducer from './rootReducer';

const store = configureStore({
  reducer: rootReducer,
  middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(logger),
});

export default store;

For legacy Redux:

import { createStore, applyMiddleware } from 'redux';
import logger from 'redux-logger';
import rootReducer from './reducers';

const store = createStore(rootReducer, applyMiddleware(logger));

export default store;

Step 3: Analyze the Console

Open your browser console. Every time an action is dispatched, you will see a color-coded log showing the previous state, the dispatched action with its payload, and the new state.


3. Debug Reducers and Selectors with Breakpoints

Sometimes, the state changes incorrectly because of logic errors inside your reducers or selectors.