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

339
Views
Renderizar un objeto anidado desde la API - Error de tipo: no se pueden leer las propiedades de undefined

Estoy tratando de acceder a la información de esta API. Puedo acceder al primer nivel, sin embargo, cuando intento acceder a cualquier propiedad más allá del primer nivel, aparece un error que indica TypeError: Cannot read properties of undefined (reading 'usd') .

Estoy usando un componente funcional y el gancho useEffect() para llamar a mi API en React.

Ejemplo de API JSON:

 { "name" : "Bitcoin", "market_cap" : { "usd" : 100 } }

Por lo que entiendo, esto se debe a que la API no se ha obtenido por completo, por lo que el primer nivel vuelve como indefinido. Puedo acceder al primer nivel ( coin.name ), pero cuando lo intento ( coin.market_cap.usd ) me sale el error.

¿Alguna sugerencia?

 const Coin = () => { const params = useParams() const [coin, setCoin] = useState({}) const url = `https://api.coingecko.com/api/v3/coins/${params.coinId}` useEffect(() => { axios.get(url).then((res) => { setCoin(res.data) }).catch((err) => { console.log(err) }) }, []) return ( <div> <h1>{coin.name}</h1> <p>{coin.market_cap.usd}</p> ------>> Error here </div> </div> ) } export default Coin
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Está utilizando las propiedades de la moneda antes de que tengan datos de su API, ya que el valor inicial es un objeto vacío {}

debe validar si los datos existen o generará el error:

 useEffect(() => { const getData = async() ={ ​​await axios.get(url).then((res) => { ​setCoin(res.data) ​}).catch((err) => { ​console.log(err)​ }) } getData()

}, [])

 ...

devolver (

 <div> <h1>**{coin.name ? coin.name : ''}**</h1> <p>**{coin.market_cap ? coin.market_cap.usd : ''}**</p> ------>> Error here </div> </div> )
about 4 years ago · Juan Pablo Isaza Report

0

El valor predeterminado de su coin es un objeto vacío y, dado que la obtención de datos es una acción async cuando el componente intenta renderizar por primera vez, no conoce el valor de market_cap , por lo que debe agregar una verificación para ese accesorio al renderizar.

Esto resolvería tu problema:

 return ( <div> {coin.name ? <h1>coin.name</h1> : null} { coin.market_data?.market_cap ? <p>{coin.market_data.market_cap.usd}</p> : null } </div> )
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!