Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

147
Visualizações
No se puede asignar una matriz fuera de useEffect

Estoy recibiendo un error en la consola de la siguiente manera:

 Cannot read properties of undefined (reading 'map')

He buscado mucho en línea durante las últimas horas y todas las soluciones indican que la llamada asíncrona no está definida y es por eso que no se pasa ningún valor al mapa. La cuestión es que se define y llama con un objeto vacío para forzar la espera. Por favor, ¿alguien podría decirme lo que me falta en el siguiente código?

 const [product, setProduct] = useState({}); useEffect(() => { const getProduct = async () => { try { const res = await publicRequest.get("products/find/" + id); setProduct(res.data); } catch (err) {} }; getProduct(); }, [id]);

Esto obtiene un objeto 'Producto', que contiene un campo de matriz llamado color. Lo uso para mostrar varias opciones en la página.

 {product.colour.map((c) => ( <FilterColor colour={c} key={c} /> ))}

Cuando cambio el código de efecto de uso para registrar en la consola res.data.colour, obtengo los valores de color. No entiendo por qué este mapa arroja este error indefinido, cuando el producto se define como resultado de la llamada setProduct.

Espero que alguien pueda ayudar :)

Editar: otros fragmentos de código que ayudarán a comprender lo anterior:

 export const publicRequest = axios.create({ baseURL: BASE_URL,});

y así es como obtengo console.log para mostrar los colores, cambiando la sección useeffect:

 useEffect(() => { const getProduct = async () => { try { const res = await publicRequest.get("products/find/" + id); setProduct(res.data); console.log(res.data.colour); //this displays an array of colours in the console } catch (err) {} }; getProduct(); }, [id]);

y sin usar la función map(), puedo mostrar datos como este: <Title>{product.title}</Title>

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Esto sucede porque, cuando se procesa la página por primera vez, antes de que se haya completado la búsqueda de API, el valor de su producto es {} , por lo que cuando hace product.colour.map , ya que no tiene ninguna propiedad de colour , obtendrá Cannot read properties of undefined .

Así que lo que tienes que hacer es

 const [product, setProduct] = useState({colour: []});

o en tu mapa hazlo

 {product?.colour.map((c) => ( <FilterColor colour={c} key={c} /> ))}
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda