Utility function to express Redux reducers as an object mapping from action types to action handlers.
MIT License
Utility function to express Redux reducers as an object mapping from action types to action handlers.
$ npm install --save @georapbox/redux-create-reducer
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. |
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. |
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
});