💫
Promise Middleware
  • Introduction
  • Getting Started
    • Introduction
    • Design Principles
  • Guides
    • Catching Errors Thrown by Rejected Promises
    • Chaining Actions
    • Comparison to other promise middleware
    • Custom Type Delimiters
    • Custom Types
    • Optimistic Updates
    • Use with Async/Await
    • Use with Reducers
    • Use with Redux Actions
    • Use with Redux Promise Actions
    • Use with Promises Resolved with Null Values
  • Upgrade Guides
    • Upgrade from 5.x to 6.0.0
    • Upgrade from 4.x to 5.0.0
    • Upgrade from 3.x to 4.0.0
    • Release History
Powered by GitBook
On this page
  1. Guides

Use with Redux Promise Actions

PreviousUse with Redux ActionsNextUse with Promises Resolved with Null Values

Last updated 6 years ago

To use this middleware with , invoke createAsyncAction and return a promise from the payload creator.

import { createAsyncAction } from 'redux-promise-middleware-actions';

// Create an async action
const fooAction = createAsyncAction('FOO', async (url) => {
  const response = await fetch(url);
  return response.json();
});

// Use async action
dispatch(fooAction('https://some.url'));

This would dispatch FOO_PENDING and FOO_FULFILLED with the data as the payload. fooAction has a reference to these action creators on the object itself, e.g. fooAction.pending(). You can listen for these in the reducer like this:

const reducer = (state, action) => {
  switch (action.type) {
    case String(fooAction.pending):
      return {
        ...state,
        pending: true,
      };
    case String(fooAction.fulfilled):
      return {
        ...state,
        data: action.payload,
        error: undefined,
        pending: false,
      };
    case String(fooAction.rejected):
      return {
        ...state,
        error: action.payload,
        pending: false,
      };
    default:
      return state;
  }
};
redux-promise-middleware-actions