Example 1: redux action
import { createActions, handleActions, combineActions } from 'redux-actions';
const defaultState = { counter: 10 };
const { increment, decrement } = createActions({
INCREMENT: (amount = 1) => ({ amount }),
DECREMENT: (amount = 1) => ({ amount: -amount })
});
const reducer = handleActions({
[combineActions(increment, decrement)]: (state, action) => {
return { ...state, counter: state.counter + action.payload.amount };
}
},
defaultState
);
export default reducer;
Example 2: redux acions
export const incAsyncCreator = createAction("INC");
export const decAsyncCreator = createAction("DEC");
export const incReducer = handleAction(
incAsyncCreator,
(state, action) => ({
...state,
counter: state.counter + 1,
success: action.payload.success
}),
counterState
);
export const decReducer = handleAction(
incAsyncCreator,
(state, action) => ({
...state,
counter: state.counter + 1,
success: action.payload.success
}),
counterState
);
export const { increment, decrement } = createActions({
increment: (payload) => ({ ...payload }),
decrement: (payload) => ({ ...payload })
});
export const counterReducer = handleActions(
{
[increment]: (state, action) => ({
...state,
counter: state.counter + 1,
success: action.payload.success
}),
[decrement]: (state, action) => ({
...state,
counter: state.counter - 1,
success: action.payload.success
})
},
counterState
);
Example 3: react reducer hooks
import React from "react";
const initialState = {counter: 0};
const INC = 'INCREMENT';
const DEC = 'DECREMENT';
function incActionCreator() {
return {
type: INC,
}
}
function decActionCreator() {
return {
type: DEC,
}
}
function hooksReducer(state, action) {
switch(action.type) {
case 'INCREMENT':
return {
...state,
counter: state.counter++
}
case 'DECREMENT':
return {
...state,
counter: state.counter--
}
default:
return state;
}
}
function App () {
const [stateAction, setDispatchAction] = React.useReducer(hooksReducer, initialState);
const incClick = (e) => setDispatchAction(incActionCreator())
const decClick = (e) => setDispatchAction(decActionCreator())
return (
<>
<button onClick={incClick}>Incerement</button>
<button onClick={decClick}>Decrement</button>
<h4>Counter: {stateAction.counter}</h4>
</>
);
}
export default App;