Blog>
Snippets

Error Handling Middleware

Code an error handling middleware to catch and respond to errors during action processing in Redux 5.0.0, providing a centralized error management solution.
const createActionError = () => ({
  type: 'ERROR_OCCURED'
});

const onError = (store) => (next) => (action) => {
  try {
    return next(action);
  } catch (err) {
    // Dispatch a global error action
    store.dispatch(createActionError());
    // Handle the error as needed, e.g., logging it or displaying a message
    console.error('Caught an error in middleware:', err);
    // Optionally re-throw the error if you want it to propagate
    throw err;
  }
};
This JavaScript code defines a Redux middleware function called onError. This middleware intercepts actions dispatched to the store, attempts to forward them to the next middleware or reducer, and catches any errors that occur in the process. If an error is caught, it dispatches an 'ERROR_OCCURED' action to allow reducers to handle the error state, logs the error to the console, and re-throws the error to propagate it.
import { createStore, applyMiddleware } from 'redux';

const rootReducer = (state = {}, action) => {
  switch (action.type) {
    // Handle your actions and include a case for error handling
    case 'ERROR_OCCURED':
      return { ...state, error: true };
    default:
      return state;
  }
};

const store = createStore(
  rootReducer,
  applyMiddleware(onError)
);
This snippet of code imports the necessary Redux functions to create a store and applies the previously defined onError middleware. It defines a simple root reducer with a case to handle the 'ERROR_OCCURED' actions by setting an error flag in the state. Finally, it creates the Redux store, applying the onError middleware so that it will intercept and handle errors for all dispatched actions.