Blog>
Snippets

Middleware for Action Transformation

Showcase a middleware that transforms the structure of incoming actions to maintain compatibility with existing reducers after the Redux 5.0.0 update.
const actionTransformerMiddleware = store => next => action => {
  // Assuming the action type has changed from `TYPE_OLD` to `TYPE_NEW`
  // and the payload structure is now under a 'payload' key
  if (action.type === 'TYPE_OLD') {
    const newAction = {
      type: 'TYPE_NEW',
      payload: action.data, // assuming the old structure had the data in 'data' key
    };
    return next(newAction);
  }

  // If the action type does not need transformation, pass it through
  return next(action);
};
This middleware intercepts dispatched actions. If an action has the old type ('TYPE_OLD'), it transforms it to the new type ('TYPE_NEW') and adjusts the payload structure to match the expectations of reducers after the Redux 5.0.0 update. Actions that do not require transformation are passed through unchanged.
import { applyMiddleware, createStore } from 'redux';
import rootReducer from './reducers';

// Apply action transformer middleware when creating the Redux store
const store = createStore(
  rootReducer,
  applyMiddleware(actionTransformerMiddleware)
);
Here, the Redux store is created by applying the `actionTransformerMiddleware`. This middleware is included in the middleware chain during the store creation process, affecting every action dispatched to the store.