@georapbox/redux-create-reducer

Utility function to express Redux reducers as an object mapping from action types to action handlers.

Usage no npm install needed!

<script type="module">
  import georapboxReduxCreateReducer from 'https://cdn.skypack.dev/@georapbox/redux-create-reducer';
</script>

README

redux-create-reducer

Utility function to express Redux reducers as an object mapping from action types to action handlers.

npm version Travis Codecov Dependencies devDependency Status npm license

Install

$ npm install --save @georapbox/redux-create-reducer

API

createReducer(initialState, handlers [, options={}]) ⇒ function

Returns: function - A function that returns the next state tree, given the current state tree and the action to handle.

Param Type Description
initialState * The initial state of the reducer.
handlers Object.<String, Function> A plain object mapping action types to action handlers.
[options={}]1 Object A plain object for available options.

1 Available options

Option Type Default Description
throwForUndefinedHandlers Boolean false If set to true or any truthy value, it will throw Error if undefined action handler is encountered (development environment); otherwise it will just print a warning in console. It has no effect in production environment.

Usage

import createReducer from '@georapbox/redux-create-reducer';

const actionTypes = {
  ADD_TODO: 'ADD_TODO',
  TOGGLE_TODO: 'TOGGLE_TODO'
};

const initialState = [];

const handlers = {
  [actionTypes.ADD_TODO]: function addTodoHandler(state, action) {
    return [
      ...state,
      {
        id: action.id,
        text: action.text,
        completed: false
      }
    ];
  },
  [actionTypes.TOGGLE_TODO]: function toggleTodoHandler(state, ation) {
    return state.map(todo =>
      todo.id === action.id
        ? {...todo, completed: !todo.completed}
        : todo
    );
  }
};

export const todosReducer = createReducer(initialState, handlers, {
  throwForUndefinedHandlers: true
});

License

The MIT License (MIT)