react dispatch code example

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

//npm i redux-actions or yarn add redux-actions

// single action creator
export const incAsyncCreator = createAction("INC");
export const decAsyncCreator = createAction("DEC");

// single action creator using - single reducer 
export const incReducer = handleAction(
  incAsyncCreator,
  (state, action) => ({
    ...state,
    counter: state.counter + 1,
    success: action.payload.success
  }),
  counterState
);

// single action creator using - single reducer 
export const decReducer = handleAction(
  incAsyncCreator,
  (state, action) => ({
    ...state,
    counter: state.counter + 1,
    success: action.payload.success
  }),
  counterState
);


//multiple action creator
export const { increment, decrement } = createActions({
  increment: (payload) => ({ ...payload }),
  decrement: (payload) => ({ ...payload })
});

// multiple action creator using - multiple reducer 
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";

// initial state
const initialState = {counter: 0};

// action type
const INC = 'INCREMENT';
const DEC = 'DECREMENT';

// action creator inc
function incActionCreator() {
   return  {
       type: INC,
   }
}

// action creator dec
function decActionCreator() {
   return  {
       type: DEC,
   }
}

// action reducer
function hooksReducer(state, action) {
   switch(action.type) {
   case 'INCREMENT':
      return {
         ...state,
         counter: state.counter++
      }
      case 'DECREMENT':
         return {
            ...state,
            counter: state.counter--
         }
   default:
      return state;
   }
}

// app component
function App () {

  // useReducer is very similar to the store in Redux
  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;