Use with Reducers

Handling actions dispatched by Redux promise middleware is simple by default.

const FOO_TYPE = 'FOO';

// Dispatch the action
const fooActionCreator = () => ({
  type: FOO_TYPE
  payload: Promise.resolve('foo')
});

// Handle the action
const fooReducer = (state = {}, action) => {
  switch(action.type) {
    case `${FOO_TYPE}_PENDING`:
      return;

    case `${FOO_TYPE}_FULFILLED`:
      return {
        isFulfilled: true,
        data: action.payload
      };

    case `${FOO_TYPE}_REJECTED`:
      return {
        isRejected: true,
        error: action.payload
      };

    default: return state;
  }
}

Action Types

Optionally, the default promise suffixes can be imported from this module.

This can be useful in your reducers to ensure types are more robust.

Large Applications

In a large application with many async actions, having many reducers with this same structure can grow redundant.

To keep your reducers DRY, you might see value in using a solution like type-to-reducer.

Last updated