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

88
Vistas
No se puede acceder al objeto anidado desde los datos JSON

Tengo el siguiente componente de función en React:

 function GetData() { const [randomDataJSON, setRandomDataJSON] = useState(''); const url = 'https://randomuser.me/api/'; const getData = () => { axios .get(`${url}`) .then((results) => { const userData = results.data.results; setRandomDataJSON(JSON.stringify(userData, null, 2)); }) .catch((err) => console.error(err)); }; return ( <div> <h3>GetData Component</h3> <pre>{randomDataJSON[0].name.first}</pre> <button onClick={getData}>Get Data</button> </div> ); } export default GetData;

Los datos JSON de la API son los siguientes:

 [ { "gender": "female", "name": { "title": "Miss", "first": "Barbara", "last": "Sullivan" }, ...

Me gustaría acceder y mostrar el first name de los datos JSON de la API usando {randomDataJSON[0].name.first en la etiqueta <pre> . Sin embargo, sigo recibiendo el siguiente mensaje de error: TypeError: Cannot read properties of undefined (reading 'name')

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Está configurando la cadena json en la variable de estado randomDataJSON e intentando usar la cadena JSON como un objeto. Puede intentar console.log(randomDataJSON) para confirmar mis sospechas.

Creo que no debería convertir su objeto de datos a json en primer lugar, así que setRandomDataJSON(JSON.stringify(userData, null, 2)); será setRandomDataJSON(userData) ;

 function GetData() { const [randomData, setRandomData] = useState(''); const url = 'https://randomuser.me/api/'; const getData = () => { axios .get(`${url}`) .then((results) => { const userData = results.data.results; setRandomData(userData, null, 2); }) .catch((err) => console.error(err)); }; return ( <div> <h3>GetData Component</h3> <pre>{randomData[0].name.first}</pre> <button onClick={getData}>Get Data</button> </div> ); } export default GetData;
about 4 years ago · Juan Pablo Isaza Denunciar

0

En el momento en que se carga la página, axios no se habría ejecutado para solicitar la matriz, por lo que randomDataJSON es una cadena en ese momento. Podrías hacerlo

 const [randomDataJSON, setRandomDataJSON] = useState([]);

Arriba, configúrelo en una matriz vacía y luego verifique si tiene longitud

 <pre>{randomDataJSON.length > 0 && randomDataJSON[0].name.first}</pre>
about 4 years ago · Juan Pablo Isaza Denunciar

0

Muchas gracias a todos los que me apuntan en la dirección correcta. Mi nuevo código es el siguiente. Mi problema era que no sabía que React no te permite renderizar objetos Javascript. Para solucionar esto, solo uso el método map() para mapear los datos y mostrar las propiedades en el objeto.

 function GetData() { const [randomDataJSON, setRandomDataJSON] = useState([]); const url = 'https://randomuser.me/api/'; const getData = () => { axios .get(`${url}`) .then((results) => { const userData = results.data.results; setRandomDataJSON(userData); }) .catch((err) => console.error(err)); }; console.log('It is an', typeof randomDataJSON); console.log('randomDataJSON is ', randomDataJSON); return ( <div> <h3>GetData Component</h3> {randomDataJSON.map((data) => { return <p>{data.name.first}</p>; })} <button onClick={getData}>Get Data</button> </div> ); } export default GetData;
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