Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

176
Vistas
React array devuelve indefinido cuando trato de obtener un elemento específico de él

Traté de hacer 2 búsquedas de datos, una para buscar todos los productos y una vez que terminó, mapeé todos los productos y busqué cada uno de ellos por separado y los puse en una matriz. El comportamiento que no entiendo ocurre cuando intento imprimir los resultados. Si consuelo. registro toda la matriz, todo funciona bien, pero si trato de hacerlo con un solo elemento de la matriz, vuelve indefinido. No pregunte por qué necesito buscar todos los productos por separado.

Aquí está el código.

 import React, { useEffect, useState } from "react"; import axios from "axios"; export const Stackoverflow1 = () => { const [data, setData] = useState(""); const [singleData, setSingleData] = useState(""); const [finished, setFinished] = useState(false); const API = `${process.env.REACT_APP_SERVER_URL}/api/products`; useEffect(() => { const fetchData = () => { axios.get(API).then((response) => { setData(response.data); setFinished(true); }); }; fetchData(); }, []); useEffect(() => { if (finished) { let list = []; data && data.map(async (item) => { const API = `${process.env.REACT_APP_SERVER_URL}/api/products/${item.id}`; axios.get(API).then((response) => { list.push(response.data); }); }); setSingleData(list); } }, [finished, data]); return ( <div> {data && singleData && data.map((item, index) => ( <div> {item.name} {console.log("inside code without index", singleData)} {console.log("inside code with index", singleData[0])} </div> ))} </div> ); }; //Console logs: // inside html without index : // [] // 0: {id: 381, name: 'Akvariumas 30l', description: 'Akvariumas 30l', price: 25.99, image_name: '16491014443.aquael-glossy-100-juodas.jpeg', …} // 1: {id: 391, name: 'Akvariumas 20l', description: 'akvariumas 20l', price: 12, image_name: '16491031283.aquarium3.jpeg', …} // 2: {id: 401, name: 'Akvariumas 30l', description: 'Akvariumas 30l', price: 150, image_name: '16491063713.aquarium4.jpeg', …} // length: 3 // [[Prototype]]: Array(0) //inside html with index undefined
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Deberías usar Promise.all para esperar todas las promesas:

 useEffect(() => { if (finished && data) { let list = []; Promise.all(data.map(async (item) => { const API = `${process.env.REACT_APP_SERVER_URL}/api/products/${item.id}`; const response = await axios.get(API); list.push(response.data) })).then(() => setSingleData(list)) } }, [finished, data]);
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda