← Volver al Inicio
Desarrollo5 min

Métodos del ciclo de vida del componente (o Hooks)

C
Camilo Pinzon
16 de marzo de 2025
Métodos del ciclo de vida del componente (o Hooks)

Ejercicio: Crea un componente que obtenga datos de una API y los muestre. Usa useEffect para manejar la petición y limpiarla si es necesario.

Práctica: Comprende cómo usar useEffect en diferentes escenarios, como obtener datos, configurar suscripciones y limpiar recursos.

Paso 1: Configurar el Componente

Comienza creando un componente funcional básico en React.

const DataFetchingComponent = () => {
return(
<div>
<h1>Componente de Obtención de Datos</h1>
</div>
);
};

export default DataFetchingComponent;

Paso 2: Agregar estado para almacenar los datos

Necesitas una variable de estado para almacenar los datos obtenidos de la API. Usa el hook useState para esto.

import {useState} from 'react';

const DataFetchingComponent = () => {
const [data, setData] = useState(null); // Inicializa el estado para almacenar datos

return(
<div>
<h1>Componente de Obtención de Datos</h1>
</div>
);
};

export default DataFetchingComponent;

Explicación:

  1. useState(null) inicializa data con un valor de null.
  2. setData es la función que usarás para actualizar el estado de los datos.

Paso 3: Obtener datos con useEffect

Ahora usa el hook useEffect para obtener datos cuando el componente se monte.

import {useState, useEffect} from 'react';

const DataFetchingComponent = () => {
const [data, setData] = useState(null);

useEffect(() => {
const fetchData = async() =>{
try{
const response = await fetch('https://jsonplaceholder.typicode.com/posts');
const result = await response.json();
setData(result);
} catch(error) {
console.error(`Error al obtener datos: ${error}`);
}
};
fetchData();
},[]); // La matriz vacía asegura que solo se ejecute una vez al montar el componente.

return(
<div>
<h1>Componente de Obtención de Datos</h1>
</div>
)
};

export default DataFetchingComponent;

Explicación:

  1. useEffect(() => {}, []) ejecuta el código solo una vez cuando el componente se monta.
  2. fetchData es una función asíncrona que obtiene datos de la API dada.
  3. setData(result) actualiza el estado con los datos obtenidos.

Paso 4: Renderizar los datos obtenidos

Ahora que los datos están almacenados en el estado, muéstralos en tu componente.

import {useState, useEffect} from 'react';

const DataFetchingComponent = () => {
const [data, setData] = useState(null);

useEffect(() => {
const fetchData = async() => {
try{
const response = await fetch('https://jsonplaceholder.typicode.com/posts');
const result = await response.json();
setData(result);
}catch(error){
console.error(`Error al obtener datos: ${error}`);
}
}
fetchData();
}, []);

return(
<div>
<h1>Ejemplo de Obtención de Datos</h1>
{data ? (
<ul>
{data.map((item, idx) => (
<li key={idx}>{item.title}</li>
))
}
</ul>
) : (
<p>Cargando...</p>
)}
</div>
);
};

export default DataFetchingComponent;

Explicación:

  1. data ? (...):(...) → Operador ternario para mostrar los datos o un mensaje de "Cargando...".
  2. data.map((item, idx) => ...) → Itera sobre la matriz de datos obtenidos y muestra cada elemento en una lista.

Manejo de limpieza (si es necesario)

En algunos casos, podrías necesitar limpiar efectos secundarios, como suscripciones o temporizadores. En este caso, no es necesario porque no hay suscripciones en curso.

import {useState, useEffect} from 'react';

const DataFetchingComponent = () => {
const [data, setData] = useState(null);

useEffect(() => {
const fetchData = async() => {
try{
const response = await fetch('https://jsonplaceholder.typicode.com/posts');
const result = await response.json();
setData(result);
}catch(error){
console.error(`Error al obtener datos: ${error}`);
}
}
fetchData();
// Función de limpieza (no necesaria aquí)
return () =>{
// Lógica de limpieza (ej. cancelar suscripciones, limpiar temporizadores, etc.)
}
}, []);

return(
<div>
<h1>Ejemplo de Obtención de Datos</h1>
{data ? (
<ul>
{data.map((item, idx) => (
<li key={idx}>{item.title}</li>
))}
</ul>
) : (
<p>Cargando...</p>
)}
</div>
);
};

export default DataFetchingComponent;

Conceptos Clave

useEffect: Esencial para manejar efectos secundarios en componentes funcionales, como obtener datos. Se ejecuta en el montaje, en actualizaciones o en el desmontaje según la matriz de dependencias.

useState: Maneja el estado local del componente, permitiendo que sea reactivo a cambios.

Renderizado Condicional: Muestra diferentes estados (cargando, error, éxito) con lógica condicional.

Puedes encontrar este ejemplo con TypeScript en mi GitHub. 🚀