To update Redux state in response to async actions using immer:
Install Immer:
npm install immer
Import produce from Immer:
import produce from 'immer';
Use in Reducer:
const initialState = {
  data: [],
  loading: false,
  error: null,
};
const reducer = (state = initialState, action) =>
  produce(state, draft => {
    switch (action.type) {
      case 'FETCH_REQUEST':
        draft.loading = true;
        draft.error = null;
        break;
      case 'FETCH_SUCCESS':
        draft.loading = false;
        draft.data = action.payload;
        break;
      case 'FETCH_FAILURE':
        draft.loading = false;
        draft.error = action.payload;
        break;
    }
  });