Lección 19. Hook useEffect 2.
En esta clase vamos a realizar ejercicios para poder entender mejor el uso de `useEffect` y las diferentes fases.
Ejercicio 1. Reloj con Hooks._
El siguiente código es un reloj contador que puede ser ocultado o visible mediante sus 2 botones:
//Importaciónes de React, useState y useEffect
import React, {useState, useEffect} from "react";
//Definicion de componente hijo
function Reloj({hora}) {
return (
<>
<h3>{hora}</h3>
{console.log("Fase de Actualizacion")}
</>
)
}
//Podremos ver al log de actualizacion en consola
//Definicion de componente padre
export default function RelojHook () {
//Creacion de hook state hora
const [hora, setHora] = useState(new Date().toLocaleTimeString());
//Creacion de hook state visible
const [visible, setVisible] = useState(false);
//Funcion controladora de los eventos click de botones (recibe valor para el cambio de state de visible)
const tictac = (valor) => setVisible(valor);
//Definición de useEfect
useEffect(() => {
//Definir variable tamporizador (donde se almacena el setInterval)
let temporizador;
//Si el state visible es true
if (visible) {
//Definimos el continua cambio del state hora (con su funcion setHora) con un setInterval (temporizador) de cada 1 segundo
temporizador = setInterval(() => {
setHora(new Date().toLocaleTimeString());
}, 1000);
//Si el state visible no es true
} else {
//Limpiar el setInterval que hay en temporizador
clearInterval(temporizador);
}
//Return para el desmontaje
return() => {
console.log("Fase de Desmontaje");
//Limpiar el setInterval que hay en temporizador
clearInterval(temporizador);
}
}, [visible]);
//El useEffect solo se ejecuta cada que el state visivle cambie de valor
return(
<>
<h2>Reloj con Hooks</h2>
{visible && <Reloj hora={hora}/>}
{/*Si el state visible es true renderiza el componente Reloj*/}
{/*2 botones que tienen como evento onclick ejecutar la funcion tictac pasandole como parametro un boolean (sirve para cambiar de valor el state visible)*/}
<button onClick={() => tictac(true)}>Iniciar</button>
<button onClick={() => tictac(false)}>Detener</button>
</>
);
}***Nota:*** La fase de desmontaje puede visualizarse en el ***return*** del `useEffect`.