useEffectpara manejar y liberar recuersos si es necesario.useEffectpara distintos escenarios, como obtener datos, configuración de suscripciones o liberar recursos.Empieza creando un componente funcional básico en React.
const DataFetchingComponent = () => {
return(
<div>
<h1>Data Fetching Component</h1>
</div>
);
};
export default DataFetchingComponent; Necesitas una variable state 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); //Initialize state for storing data
return(
<div>
<h1>Data Fetching Component</h1>
</div>
);
};
export default DataFetchingComponent; useState(null)inicializa data con un valor null.setData es la función que usarás para actualizar el data state.Ahora usa el useEffect hook para obtener la data cuando el componente sea montado.
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 fetching data: ${error}`);
}
};
fetchData();
},[]); // Empty dependency array to run only once on mount
return(
<div>
<h1>Data Fetching Component</h1>
</div>
)
};
export default DataFetchingComponent; useEffect(() => {}, []) corre el código una vez, cuando el componente es montado. El array vacío [] se asegura de esto.fetchData es una función asincrona que obtiene los datos de la API suministrada.setData(result) actualiza el data con el resultado obtenido.Ahora que los datos se han obtenido y están almacenados, renderízalos 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 fetching data: ${error}`);
}
}
fetchData();
}, []);
return(
<div>
<h1>Fetching data example</h1>
{data ? (
<ul>
{data.map((item, idx) => (
<li key="{idx}">{item.title}</li>
))}
</ul>
) : (
<p>Loading...</p>
)
}
</div>
);
};
export default DataFetchingComponent; data ? (...):(...): Este es un operador condicional (ternario). Si data no es nullrenderiza una lista de los datos; de otra forma muestra un mensaje de "Loading..."data.map((item, idx) => ...): Itera sobre el array de los datos obtenidos y renderiza cada uno como elemento de una lista.En algunos casos, es posible que debas limpiar después de los efectos secundarios. Por ejemplo, si configuras suscripciones o temporizadores. En este caso, no se requiere limpieza porque no hay ninguna suscripción o temporizador 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 fetching data: ${error}`);
}
}
fetchData();
//Cleanup function (not necessary here)
return () =>{
//cleanup logic (e.g., unsubscribe, clear timers, etc.)
}
}, []);
return(
<div>
<h1>Fetching data example</h1>
{data ? (
<ul>
{data.map((item, idx) => (
<li key="{idx}">{item.title}</li>
))}
</ul>
) : (
<p>Loading...</p>
)
}
</div>
);
};
export default DataFetchingComponent; useEffect: Este hook es esencial para los efectos secundarios en componentes funcionales, como la obtención de datos. Puede ejecutarse al montar, al actualizar o al desmontar, dependiendo del array de dependencias.useState: Maneja el estado local del componente, permitiéndole ser reactivo a los cambios (por ejemplo, actualizando la interfaz de usuario cuando se obtienen nuevos datos).Puedes encontrar este ejemplo utilizando TypeScript en mi github
