¿Qué son los efectos en React?
Clase 18 de 34 • Curso de React.js
Contenido del curso
- 13

Local Storage con React.js
25:48 - 14

Custom Hooks
17:53 - 15

Organización de archivos y carpetas
07:40 - 16

Feature-First Directories en React
09:12 - 17

Tips para naming y abstracción de componentes React
12:24 - 18

¿Qué son los efectos en React?
14:04 - 19

Estados de carga y error
15:04 - 20

Actualizando estados desde useEffect
16:20 - 21

Reto: loading skeletons
11:59 - 22

¿Qué es React Context?
20:57 - 23

useContext
10:47 - 24

¿Qué son los React Portals?
14:03 - 25

Reto: estados para abrir y cerrar un modal
03:33 - 26

Maquetando formularios en React
15:08 - 27

Crear TODOs: React Context dentro de React Portals
15:16
¿Qué son los efectos en React.js y cómo nos pueden ayudar?
Los efectos en React.js son una herramienta crucial para manejar lógicas complicadas, como consultas a APIs o procesos que pueden retrasarse. Estas operaciones deben ejecutarse únicamente cuando es estrictamente necesario, evitando que se repitan en cada renderización del componente. Los efectos permiten encapsular estas lógicas para que se ejecuten sólo una vez, por ejemplo, al primer render. Así mejora la eficiencia y rendimiento de nuestras aplicaciones.
¿Cómo encapsular lógicas pesadas con useEffect?
Para utilizar los efectos en React, empleamos el hook useEffect. Vamos a ver cómo podemos integrarlo en nuestra aplicación a través del siguiente ejemplo:
import React, { useEffect } from 'react';
function MiComponente() {
useEffect(() => {
console.log("Este efecto se ejecuta únicamente una vez.");
}, []);
return <div>Mi componente</div>;
}
- Primer argumento: Recibe una función que encapsula la lógica que queremos ejecutar.
- Segundo argumento: Es un array de dependencias que determina cuándo se debe ejecutar el efecto.
¿Qué sucede con el orden de ejecución en los efectos?
Al encapsular una parte de nuestra lógica dentro de useEffect, el orden de ejecución cambia. La lógica del efecto se ejecuta después del resto del código en el componente:
console.log('log1');
useEffect(() => {
console.log('log2');
}, []);
console.log('log3');
Los logs se imprimen en este orden:
- log1
- log3
- log2
Esto ocurre porque el efecto se ejecuta después del render inicial.
¿Cómo influye el array de dependencias?
El array de dependencias dentro de useEffect decide si el efecto debe ejecutarse después de cada render o sólo bajo ciertas condiciones. Si se proporciona un array vacío, el efecto se ejecuta únicamente una vez, al montar el componente:
useEffect(() => {
console.log("Efecto con array vacío, ejecutado una vez.");
}, []);
Si incluimos dependencias, el efecto se ejecutará cada vez que las dependencias cambien:
useEffect(() => {
console.log("Efecto ejecutado cada vez que 'estado' cambia.");
}, [estado]);
Aquí, el efecto se desencadena siempre que el valor de estado se modifica.
Casos prácticos: Cargando datos de APIs en React
Un uso común de useEffect es gestionar estados de carga y error al recuperar datos de APIs:
function ComponenteEjemplo() {
const [data, setData] = React.useState(null);
const [loading, setLoading] = React.useState(true);
useEffect(() => {
async function fetchData() {
try {
let response = await fetch('https://api.example.com/data');
let result = await response.json();
setData(result);
setLoading(false);
} catch (error) {
console.error("Error al cargar los datos", error);
setLoading(false);
}
}
fetchData();
}, []);
if (loading) return <p>Cargando...</p>;
return <div>{data ? data.message : "Error al cargar información"}</div>;
}
- Estado inicial de carga: Indicamos al usuario que los datos están en proceso de cargarse.
- Actualización basada en promesas: Una vez que la respuesta de API es recibida, actualizamos el estado y causamos un nuevo render.
- Evitar llamadas innecesarias: Usamos un array vacío para que el efecto sólo realice la llamada una vez.
Mejoras en la experiencia del usuario
Implementar useEffect no solo mejora la eficiencia de nuestra aplicación sino también la experiencia del usuario. La aplicación responde más ágilmente, evitando esperas innecesarias o sobrecarga de procesos. Introduce mejoras simples, pero significativas en el desempeño y usabilidad. Además, asegúrate de mantener una buena práctica en la gestión de estados para ofrecer a los usuarios interacciones fluidas y efectivas.