How to build a counter app with useReducer Hook
Create a counter using the useReducer and the useState Hook

I'm a software developer with a love for problem-solving and creating intuitive user experiences. I specialize in JavaScript, TypeScript, Python, and React.
On this blog, I share tutorials, coding tips, and lessons learned from my journey in tech. My goal is to make complex concepts accessible to everyone.
In this post, we will learn how to create a simple counter component that can INCREMENT DECREMENT RESET and SET-VALUE using the React useReducer hook.
Getting Started
Step 1: Build React App
Step 2: Make Counter Component File
Step 3: Build Counter with useReducer Hook
Step 4: Run React Application
Build React App
The first thing we need to do is to create our react app
Create a folder in the directory you want to create the react app
Right-click and select open with visual studio code
On the top of our visual studio code click on terminal and select new terminal

Then run npm create-react-app (name of your app), wait till it installs finish
npm create-react-app (name of your app) //npm create-react-app counterNavigate into the project root by running cd (name of directory)
cd counter
Make Counter Component file
In your project structure, you have /public and /src directories, along with the regular node_modules, .gitignore, README.md, and package.json.
In /public, our important file is index.html, which is very similar to the static index.html the file we made in the first method - just a root div. The /src directory will contain all our React code.
You can delete all the files out of the /src directory, and we'll create our own boilerplate. We'll just keep index.css and index.js.
Then create a new file named Counter.jsx where our counter app will run
Build Counter with useReducer Hook
In this app we will be able to Increment, Decrement , Reset and set value in our counter, copy this code below
import React, {useReducer} from 'react'
import './Home.css'
const ACTIONS = {
INCREMENT: 'increment',
DECREMENT: 'decrement',
RESET: 'reset',
SET_VALUE: 'set'
}
function reducer(state, action){
switch(action.type) {
case ACTIONS.INCREMENT:
return { count : state.count + 1}
case ACTIONS.DECREMENT:
return { count: state.count - 1}
case ACTIONS.RESET:
return { count: 0}
case ACTIONS.SET_VALUE:
return { count: Number(action.payload) }
default:
return state
}
}
const Home = () => {
const [state, dispatch] = useReducer(reducer, {count: 0})
function increment() {
dispatch({ type: ACTIONS.INCREMENT})
}
function decrement() {
dispatch({ type: ACTIONS.DECREMENT})
}
function reset(){
dispatch({ type: ACTIONS.RESET})
}
function set(e){
dispatch({type: ACTIONS.SET_VALUE, payload: e.target.value})
}
return (
<div className='home'>
<div className='home__app'>
<h1>Passenger Counter</h1>
<span>{state.count}</span>
<div className='buttons'>
<button classname='sub' onClick={decrement}>-</button>
<button classname='add' onClick={increment}>+</button>
<button classname='res' onClick={reset}>Reset</button>
<form>
<input type='text' placeholder='Input Manually'
value={state.count}
onChange = {set}
/>
</form>
</div>
</div>
</div>
)
}
export default Home
Run React Application
To run the react application on your browser you need to evoke the following command from the terminal.
npm start
Conclusion
You can check the live site for a demo https://passenger-counter-tau.vercel.app/
The link to the github repohttps://github.com/Timmydee/Passenger_Counter
Happy Reading!!!
I'd love to connect with you via Twitter | LinkedIn | GitHub |




