Description
In this Web Development tutorial we are going to create a countdown timer using the React JavaScript librari / framework and also using React Hock like useState and useEffect
Donation!

Buy me a Coffee
Hi, if you like my content and you wish to give back you can buy me a Coffee!
$3.00

Buy me a Pizza
Hi, if you like my content and you wish to give back you can buy me a Pizza!
$7.00
Content of this tutorial
What is a Hook?
A Hook is a special function that lets you “hook into” React features. For example, useState
is a Hook that lets you add React state to function components. We’ll learn other Hooks later.
When would I use a Hook?
If you write a function component and realize you need to add some state to it, previously you had to convert it to a class. Now you can use a Hook inside the existing function component. We’re going to do that right now!
need to have node.js and npm installed:
- npx create-react-app .
- npm start to start the server
- React hooks used:
- useState
- useEffect
App.js Code:
import "./App.css";
import React, { useState, useEffect } from "react";
import Clock from "./Components/Clock";
function App() {
const [timerDays, setTimerDays] = useState();
const [timerHours, setTimerHours] = useState();
const [timerMinutes, setTimerMinutes] = useState();
const [timerSeconds, setTimerSeconds] = useState();
let interval;
const startTimer = () => {
const countDownDate = new Date("May 30,2021 ").getTime();
interval = setInterval(() => {
const now = new Date().getTime();
const distance = countDownDate - now;
const days = Math.floor(distance / (24 * 60 * 60 * 1000));
const hours = Math.floor(
(distance % (24 * 60 * 60 * 1000)) / (1000 * 60 * 60)
);
const minutes = Math.floor((distance % (60 * 60 * 1000)) / (1000 * 60));
const seconds = Math.floor((distance % (60 * 1000)) / 1000);
if (distance < 0) {
// Stop Timer
clearInterval(interval.current);
} else {
// Update Timer
setTimerDays(days);
setTimerHours(hours);
setTimerMinutes(minutes);
setTimerSeconds(seconds);
}
});
};
useEffect(() => {
startTimer();
});
return (
<div className="App">
<Clock
timerDays={timerDays}
timerHours={timerHours}
timerMinutes={timerMinutes}
timerSeconds={timerSeconds}
/>
</div>
);
}
export default App;
App.css Code:
* {
margin: 0;
padding: 0;
}
.App {
text-align: center;
height: 100vh;
background-color: #282c34;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.clock {
position: relative;
margin: a;
display: flex;
justify-content: center;
align-items: center;
background: linear-gradient(270deg, #051817, #0e3839);
height: 180px;
width: 360px;
color: #06f1f6;
text-shadow: 1px 1px 7px;
border-radius: 15px;
border: 2px solid silver;
box-shadow: 0 0 5px 25px;
}
.clock section {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
padding: 1rem;
}
.clock section p {
font-size: 4rem;
}
.clock section small {
color: silver;
text-shadow: none;
}
.App-logo {
height: 40vmin;
pointer-events: none;
}
@media (prefers-reduced-motion: no-preference) {
.App-logo {
animation: App-logo-spin infinite 20s linear;
}
}
.App-header {
background-color: #282c34;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: calc(10px + 2vmin);
color: white;
}
.App-link {
color: #61dafb;
}
@keyframes App-logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
Component: Arrays
import React, { Fragment } from "react";
const Clock = ({ timerDays, timerHours, timerMinutes, timerSeconds }) => {
return (
<Fragment>
<section className="timer-container">
<section className="timer">
<div className="clock">
<section>
<p>{timerDays}</p>
<small>Days</small>
</section>
<span>:</span>
<section>
<p>{timerHours}</p>
<small>Hours</small>
</section>{" "}
<span>:</span>
<section>
<p>{timerMinutes}</p>
<small>Minutes</small>
</section>{" "}
<span>:</span>
<section>
<p>{timerSeconds}</p>
<small>Seconds</small>
</section>
</div>
</section>
</section>
</Fragment>
);
};
Clock.defaultProps = {
timerDays: 10,
timerHours: 10,
timerMinutes: 10,
timerSeconds: 10,
};
export default Clock;
For more information about JavaScript get the Complete Modern JavaScript Course NOW and become a javascript developer
Modern JavaScript and NodeJS from Beginner to Advanced

Popular course:

Thank you
Glad I can help! 🙂
Nice app, thanks. My clock doesn’t count down. Any tips?
Hi, check the code in the description, hope this helps 🙂