Home

Awesome

Redux Standard Action

build status npm version

This module is based directly off of flux-standard-action

Introduction

A human-friendly standard for Redux action objects. Feedback welcome.

Motivation

It's much easier to work with Redux actions if we can make certain assumptions about their shape. For example, essentially all Redux actions have an identifier field, such as type, actionType, or actionId. Many Redux implementations also include a way for actions to indicate success or failure, especially as the result of a data-fetching operation. Defining a minimal, common standard for these patterns enables the creation of useful tools and abstractions.

Errors as a first class concept

Redux actions can be thought of as an asychronous sequence of values. It is important for asynchronous sequences to deal with errors. Currently, many Redux implementations don't do this, and instead define separate action types like LOAD_SUCCESS and LOAD_FAILURE. This is less than ideal, because it overloads two separate concerns: disambiguating actions of a certain type from the "global" action sequence, and indicating whether or not an action represents an error. FSA treats errors as a first class concept.

Design goals

Example

A basic Redux Standard Action:

{
  type: 'ADD_TODO',
  payload: {
    text: 'Do something.'  
  }
}

An FSA that represents an error, analogous to a rejected Promise:

{
  type: 'ADD_TODO',
  payload: new Error(),
  error: true
}

Actions

An action MUST

An action MAY

An action MUST NOT include properties other than type, payload, and error, and meta.

type

The type of an action identifies to the consumer the nature of the action that has occurred. type can only be a string constant or a Symbol.

payload

The optional payload property MAY be any type of value. It represents the payload of the action. Any information about the action that is not the type or status of the action should be part of the payload field.

If error is true, the payload MUST be an error object. This is akin to rejecting a promise with an error object.

error

The error property MUST be set to true if the action represents an error.

An action whose error is true is analogous to a rejected Promise. By convention, the payload SHOULD be an error object.

If error has any other value besides true, including undefined and null, the action MUST NOT be interpreted as an error.

meta

The optional meta property MAY be any type of value. It is intended for any extra information that is not part of the payload.

Utility functions

The module redux-standard-action is available on npm. It exports a few utlity functions.

import { isRSA } from 'redux-standard-action';

isRSA(action)

Returns true if action is RSA compliant.

Redux Middleware:

const warnRSAMiddleware = store => next => action => {
  if (!isRSA(action)) {
    console.warn('invalid RSA', action);
  }
  return next(action);
};

const createStoreWithMiddleware = applyMiddleware(
  warnRSAMiddleware
)(createStore);