rereducer
v2.1.3
Published
Create declarative redux reducers without boilerplate.
Downloads
276
Maintainers
Readme
rereducer
Create declarative redux reducers without boilerplate.
Basic example:
import rereducer from 'rereducer';
const INITIAL_COUNTER_STATE = 0;
const counter = rereducer(
INITIAL_COUNTER_STATE,
['INCREASE', x => x + 1],
['DECREASE', x => x - 1]
);
counter();
// => 0
counter(5, { type: 'INCREASE' });
// => 6
What if you want the same transformation for more than one action type?
import rereducer from 'rereducer';
const INITIAL_COUNTER_STATE = 0;
const counter = rereducer(
INITIAL_COUNTER_STATE,
['INCREASE', x => x + 1],
['DECREASE', x => x - 1],
[['RESET', 'LOGOUT'], () => INITIAL_COUNTER_STATE]
);
counter(100, { type: 'RESET' });
// => 0
counter(100, { type: 'LOGOUT' });
// => 0
What if you need a more complex condition for a transformation?
import rereducer from 'rereducer';
const INITIAL_COUNTER_STATE = 0;
const whenSomethingSpeciallHappens = (state, action) => (
action.type === 'SOMETHING_SPECIAL' &&
action.payload === 'SPECIAL_INDEED' &&
state > 10
);
const counter = rereducer(
INITIAL_COUNTER_STATE,
['INCREASE', x => x + 1],
['DECREASE', x => x - 1],
[whenSomethingSpeciallHappens, x => x + 1000]
);
counter(11, { type: 'SOMETHING_SPECIAL', payload: 'SPECIAL_INDEED' });
// => 1011
counter(10, { type: 'SOMETHING_SPECIAL', payload: 'SPECIAL_INDEED' });
// => 10
counter(11, { type: 'SOMETHING_SPECIAL' });
// => 11
Credits to:
- @winkerVSbecks: For sharing good ideas and feedback about the API