Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

160
Views
TypeError: no se pueden leer las propiedades de undefined (leyendo 'mapa') cuando se llama desde una API

Realmente estoy atascado en un problema: si ejecuta el código a continuación, obtendrá un error "Error de tipo: no se pueden leer las propiedades de undefined (leyendo 'mapa')".

Cuando la consola cierra la sesión de la variable "elementos", obtengo 2 resultados como se muestra aquí: ingrese la descripción de la imagen aquí

El problema radica en el primer resultado, ya que está vacío. Pero, ¿alguien puede explicarme por qué este resultado está vacío y por qué produce 2 resultados?

Este código se tomó directamente de aquí y se modificó para adaptarse a lo que devuelve la API. Considere ejecutar este código para que pueda ver lo que quiero decir.

 import React, {useState, useEffect} from 'react'; import logo from './logo.svg'; import './App.css'; function App() { const [error, setError] = useState(null); const [isLoaded, setIsLoaded] = useState(false); const [items, setItems] = useState([]); useEffect(() => { fetch("http://www.7timer.info/bin/api.pl?lon=113.17&lat=23.09&product=astro&output=json") .then(res => res.json()) .then( (result) => { setIsLoaded(true); setItems(result); }, // Note: it's important to handle errors here // instead of a catch() block so that we don't swallow // exceptions from actual bugs in components. (error) => { setIsLoaded(true); setError(error); } ) }, []) if (error) { return <div>Error: {error.message}</div>; } else if (!isLoaded) { return <div>Loading...</div>; } else { return ( <ul> {items.dataseries.map(item => ( {console.log(item)} ))} </ul> ); } } export default App;
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Hay dos errores que pude ver.

  1. Uno de ellos es que los datos que está obteniendo son un objeto mientras lo configura inicialmente para que sea una matriz y también está usando la función de mapa que solo se puede usar en matrices.
  2. Inicialmente, su matriz no contiene dataseries y tampoco puede acceder a propiedades como esa en una matriz correcta (porque la matriz tiene índices por los cuales obtenemos el valor allí).

Entonces, lo que podría hacer es configurar esta función para que sea así

 useEffect(() => { fetch("http://www.7timer.info/bin/api.pllon=113.17&lat=23.09&product=astro&output=json") .then(res => res.json()) .then( (result) => { setIsLoaded(true); setItems(result.dataseries); }, // Note: it's important to handle errors here // instead of a catch() block so that we don't swallow // exceptions from actual bugs in components. (error) => { setIsLoaded(true); setError(error); } )}, [])

Y la función de retorno para ser algo como esto

 return ( <ul> {items.map(item => ( {console.log(item)} ))} </ul> );
about 4 years ago · Juan Pablo Isaza Report

0

Los elementos son una matriz, no el objeto, por ejemplo, [{...}, {...}] , la serie deseada está dentro del objeto, no de los elementos.

 <ul> {items.map(item => item.dataseries.map(ds=> ( {console.log(ds)} )))} </ul>
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!