
Hoy vamos a aprender a como crear un simple contador con Reactjs que nos permitirá practicar el uso del hook llamado useState |
Para iniciar nos vamos al escritorio y escribimos en la terminal de nuestro sistema el siguiente comando:
npx create-react-app counter
Una vez terminado procedemos a abrir nuestro proyecto con nuestro editor de código favorito en mi caso visual studio code
Procedemos a limpiar lo que no usaremos para este tutorial quedando nuestro proyecto de la siguiente manera:

Procedemos a modificar nuestro app.js con el siguiente contenido:
function App() {
return (
<div>
<h1>0</h1>
<div>
<button>-</button>
<button>+</button>
</div>
</div>
);
}
export default App;
Quedando nuestro ejemplo de la siguiente manera:

Ahora vamos a incorporar la funciononabilidad del contador para eso hacemos usao del hook llamado useState de react
import {useState} from 'react'
function App() {
return (
<div>
<h1>0</h1>
<div>
<button>-</button>
<button>+</button>
</div>
</div>
);
}
export default App;
Creamos antes del return el siguiente código para inicializar nuestro contador const [counter,setCounter] = useState(0)
import {useState} from 'react'
function App() {
const [counter,setCounter] = useState(0)
return (
<div>
<h1>{counter}</h1>
<div>
<button>-</button>
<button>+</button>
</div>
</div>
);
}
export default App;
Asignamos dentro del h1 el valor del counter {counter}
entre llaves (Código jsx) y procedemos a hacer funcionar los botones de - & + respectivamente onClick={()=>setCounter(counter-1)}
onClick={()=>setCounter(counter+1)}
quedando el código de la siguiente manera:
import {useState} from 'react'
function App() {
const [counter,setCounter] = useState(0)
return (
<div>
<h1>{counter}</h1>
<div>
<button onClick={()=>setCounter(counter-1)} >-</button>
<button onClick={()=>setCounter(counter+1)} >+</button>
</div>
</div>
);
}
export default App;
Y con eso ya tenemos la funcionalidad del tutorial listo, lo que queda por hacer es darle estilos a nuestro ejemplo para ello modificamos el index.css con los siguientes estilos:
@import url('https://fonts.googleapis.com/css2?family=Spartan&display=swap');
*,
*::before,
*::after{
box-sizing: border-box;
margin:0;
padding:0;
}
.app {
font-family: 'Spartan', sans-serif;
display:flex;
flex-direction: column;
justify-content:center;
align-items:center;
gap: 2rem;
height: 100vh;
color: #222;
}
h1 {
font-size: 6rem;
}
.app .botones {
display: flex;
gap: 1rem;
}
.app .botones * {
border: none;
background-color: #444;
box-shadow: 0px 0px 10px #cfd8dc;
font-weight: bold;
font-size: 2rem;
color: orange;
border-radius: 50%;
height: 4rem;
width: 4rem;
cursor: pointer;
outline: none;
transition: background-color 250ms ease-in-out, transform 50ms ease-in-out;
}
.app .botones *:hover {
background-color: #cfd8dc;
}
.app .botones *:active {
transform: scale(0.9);
}
.negativo {
color: #c00;
animation: pulse 500ms ease-in-out;
}
.positivo {
color: #72c02c;
animation: pulse 500ms ease-in-out;
}
@keyframes pulse {
0%,
100% {
transform: scale(1);
}
50% {
transform: scale(1.2);
}
}
Quedando nuestro ejemplo de la siguiente manera:

Lo último por hacer será que cuando el valor sea negativo el color de fuente cambie a rojo y cuando el valor sea mayor que cero cambie a verde y cuando sea 0 que mantenga el color default, para hacer eso creamos una condicional ternaria dentro de la clase del h1 de la siguiente manera:
import {useState} from 'react'
function App() {
const[counter,setCounter] = useState(0)
return (
<div className="app">
<h1 className={counter < 0 ? 'negativo' : counter > 0 ? 'positivo' : null }>{counter}</h1>
<div className="botones">
<button onClick={()=>setCounter(counter-1)}>-</button>
<button onClick={()=>setCounter(counter+1)}>+</button>
</div>
</div>
);
}
export default App;
Quedando de la siguiente manera:

Aquí pueden ver el ejemplo en vivo
Y con esa amigos llegamos al final del tutorial, espero que lo hayan disfrutado y hasta la próxima!
Visita mi sitio web oficial
Excelente Tutorial!! Muchas graciar por compartirlo
De nada :)