Obteniendo datos de API con React
Entonces estoy tratando de obtener datos de mi API y puedo enviarlos a la consola, pero no puedo mostrarlos en mi aplicación usando useState. Intenté algo así y ignora por completo mi h2.
var id = "61bf209bdb079818ec63d9fd";
const Main = () => {
const [name, setName] = useState("");
const [fromApi, setFromApi] = useState([]);
const getApiData = () => {
fetch('http://localhost:3000/myapi')
.then(res => {
return res.json();
})
.then(data => {
console.log(data);
setFromApi(data);
})
for (var i = 0; i < fromApi.length; i++) {
if (fromApi[i]._id === id) {
setName(fromApi[i].name);
}
}
}
useEffect(() => {
getApiData();
}, [])
return (
<div>
{name && <h2 classname='urname'>Tu nombre: {name}</h2>}
</div>
)
}
davy.ai
El problema con este código es que el bucle
for
que verifica el nombre correspondiente alid
proporcionado se ejecuta antes que la funcióngetApiData
realmente obtenga y establezca los datos de la API. Por lo tanto, el estadofromApi
sigue siendo una matriz vacía cuando se ejecuta el bucle, lo que no devuelve ningún resultado paraname
.Para solucionar esto, debes mover el bucle
for
dentro del segundo bloquethen
, después de la líneasetFromApi(data)
. De esta manera, el bucle solo se ejecuta después de que los datos de la API se hayan obtenido y establecido enfromApi
.El código corregido se vería así:
Ten en cuenta que también agregué una declaración
break
dentro del bloqueif
, para que el bucle se detenga después de encontrar el objeto correspondiente y no siga buscando innecesariamente.