useEffect
Este es un concepto introducido por react en 2018, y lo llamaron ganchos (Hook). De lo cual ya hemos visto otro concepto relacionado, los estados también son ganchos (Hook). En el caso de useEffect lo llamaron efectos secundarios y cuesta bastante entenderlo a alguien que no sepa nada de react como es el caso de quien describe este artículo, por esa razón me detuve varias horas a investigar algún ejemplo o problema sencillo que ejemplificara las características de useEffect. Algunos de los ejemplos de la documentación oficial no ejemplifican adecuadamente el uso de estos efectos como para que un lector poco experimentado lo pueda comprender. Hago énfasis en las palabras problema sencillo, debido a que el primer concepto que debe tener claro el lector es el problema que se intenta resolver con react. Nos apoyaremos en un ejemplo que brinda la documentación oficial, el cual lo modificaré para que se pueda distinguir el efecto.
El siguiente fragmento está basado en el ejemplo del contador, pero le hemos añadido una funcionalidad nueva: actualizamos el título del documento con un mensaje personalizado que incluye solo el número de clicks impares.
import React, { useState, useEffect } from 'react';
function Example() {
const [count, setCount] = useState(0);
const [isImpar,setIsImpar]=useState(false);
function handleOnClick(){
setCount(count + 1);
if (!(count%2))
setIsImpar(!isImpar);
}
useEffect(() => {
document.title = `You clicked ${count} times`;
},[isImpar]);
return (
<div>
<p>You clicked {count} times</p>
<button onClick={ onClick={handleOnClick }>
Click me
</button>
</div>
);
}
EL segundo parámetro [isImpar] pasado al gancho useEffect define el funcionamiento de este gancho, solo se ejecutara la callback pasada como primer parámetro cuando el estado isImpar cambie de valor y eso solo sucederá si count es impar.
Ahora si cambiáramos la función a esta otra forma veremos que sucede.
useEffect(() => {// Actualiza el título del documento usando la API del navegador
document.title = `You clicked ${count} times`;
},[]);
EL segundo parámetro [] react asume que no interesan los cambios de ningún estado ni de ningún parámetro en las props, por lo que useEffect solo se ejecutara al inicio.
Ahora si cambiáramos la función a esta otra forma veremos que sucede.
useEffect(() => {// Actualiza el título del documento usando la API del navegador
document.title = `You clicked ${count} times`;
});
No pasamos el 2do parámetro de la función useEffect, pues simplemente se ejecutara siempre, da la impresión incluso que usar useEffect y no usarla produce el mismo resultado.
document.title = `You clicked ${count} times`;
Se que es un poco extenso, pero es la manera de dar todo lo que he podido aprender de este gancho, y se que tengo errores e incluso no domino bien varios de los coceptos, solo expongo de manera práctica, y por esa razón estoy seguro que no estoy viendo algunos elementos que me faltan en esas explicaciones. Si alguien fuera tan amable, de tomarse el tiempo y ayudarme. Gracias, por su trabajo.