Как получить данные из API, когда внутри JSON есть серверные массивы с помощью React

Я пытаюсь получить данные с помощью метода map() из этого API. https://api.nasa.gov/DONKI/CME?startDate=yyyy-MM-dd&endDate=yyyy-MM-dd&api_key=DEMO_KEY

Я могу получить данные из первого массива, но внутри основного массива есть другой массив, где я получаю ошибку реакции при попытке получить данные с помощью другого цикла. Данные, которые необходимо получить, выделены на изображении...

import React from 'react'
import { useState, useEffect } from 'react'
import axios from 'axios';


const AstronomyPic = () => {
    const [images, setImages] = useState([])

    useEffect(() => {
        axios.get('https://api.nasa.gov/DONKI/CME?startDate=yyyy-MM-dd&endDate=yyyy-MM-dd&api_key=DEMO_KEY')
          .then(response => setImages (response.data)).
    catch(error =>console.error(" Error fetchin users", error)); 
      }, []);
  return (
    <div>

        <h1 className = "text-center mt-5">Astronomy</h1>
        <ol>
        {images.map((image) => (
        <div><li>
          <p>{image.activityID}</p>
          <p>{image.catalog}</p>
          <p>{image.startTime}</p>
          <p>{image.sourceLocation}</p>
          <p>{image.activeRegionNum}</p>
          <p>{image.link}</p>
          <p>{image.note}</p>
          <p>Items: {images.items.map((item) => (
            <p>{item.instruments}</p>
          ))}</p>
          </li>
         
        </div>
         
      ))}
      </ol>
      

</div>

)

}

export default AstronomyPic
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react/18.2.0/umd/react.production.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react-dom/18.2.0/umd/react-dom.production.min.js"></script>

]2 ] 2

Можете ли вы опубликовать данные ответа в формате JSON без изображения?

SELA 23.02.2024 17:50

Данные ответа JSON слишком длинные для публикации. Это ссылка, ведущая к данным api.nasa.gov/DONKI/…

Malith Senanayake 28.02.2024 16:02
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
2
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Похоже, у какого-то элемента нет атрибута instruments. Возможно, вы захотите проверить это перед тем, как перебирать атрибут instruments.

const AstronomyPic = () => {
  const [images, setImages] = useState([]);

  return (
    <div>
    {
      images.map((image) => (
        <>
          <p>...some other attributes</p>
          { image.instruments && <>
            instruments attribute is defined, loop through instruments here
          </>}
          <p>...some other attributes</p>
        </>
      )
    }
    </div>
  );
}
Ответ принят как подходящий

Кажется, инструменты имеются не во всех элементах. Вы можете избежать любого исключения нулевой ссылки, используя необязательный оператор цепочки. См. код ниже:

import React from 'react'
import { useState, useEffect } from 'react'
import axios from 'axios';


const AstronomyPic = () => {
    const [images, setImages] = useState([])

    useEffect(() => {
        axios.get('https://api.nasa.gov/DONKI/CME?startDate=yyyy-MM-dd&endDate=yyyy-MM-dd&api_key=DEMO_KEY')
          .then(response => setImages (response.data)).
    catch(error =>console.error(" Error fetchin users", error)); 
      }, []);
  return (
    <div>

        <h1 className = "text-center mt-5">Astronomy</h1>
        <ol>
        {images?.map((image) => (
        <div><li>
          <p>{image.activityID}</p>
          <p>{image.catalog}</p>
          <p>{image.startTime}</p>
          <p>{image.sourceLocation}</p>
          <p>{image.activeRegionNum}</p>
          <p>{image.link}</p>
          <p>{image.note}</p>
          <p>Items: {image?.items?.map((item) => (
            <p>{item?.instruments}</p> // Use Optional chaining after item
          ))}</p>
          </li>
         
        </div>
         
      ))}
      </ol>
      

</div>

)

}

export default AstronomyPic

Другие вопросы по теме