Как извлечь данные из массива вложенных объектов в React?

#javascript #arrays #reactjs #json #nested-object

Вопрос:

У меня своего рода особая проблема. В настоящее время я изучаю react и извлек данные из своего собственного демонстрационного API (проект Java Spring).

Однако я правильно получаю данные в React. Теперь я создаю с его помощью компоненты (Метаданные музыкальной дорожки). Ответ API возвращает массив объектов, и один элемент внутри объекта является вложенным объектом. Теперь я не знаю, как я могу извлечь эту информацию в свой компонент React.

Вот пример JSON моего ответа:

 Object { ​​ duration: 200015 ​​ explicit: false ​​ id: 8 ​​ isrc: "AUDCB1701705" ​​ name: "Fireworks (feat. Moss Kena amp; The Knocks)" ​​ songInfo: Object { id: 7, fullTitle: "Fireworks by Purple Disco Machine (Ft. The Knocks amp; Moss Kena)", geniusUrl: "https://genius.com/Purple-disco-machine-fireworks-lyrics", … } ​​​ fullTitle: "Fireworks by Purple Disco Machine (Ft. The Knocks amp; Moss Kena)" ​​​ geniusUrl: "https://genius.com/Purple-disco-machine-fireworks-lyrics" ​​​ id: 7 ​​​ trackMetadata: null  

Как вы можете видеть, songInfo-это вложенный объект. Мой компонент реакции похож на:

 class ResultArea extends Component {   constructor(props) {  super(props);  this.state = {  tracks: []  }  }   componentDidMount() {  axios.get("http://localhost:8080/all")  .then(response =gt; {  this.setState({  tracks: response.data  })  })  }   componentDidUpdate(prevProps, prevState, snapshot) {  console.log("Component updated! State is now:");  console.log(this.state.tracks);  }   render() {  const tracklist = this.state.tracks;  const tracks = tracklist.map(  ({isrc, duration, explicit, fullTitle, geniusUrl}) =gt;  lt;Track key={isrc} fullTitle={fullTitle} isrc={isrc} duration={duration} explicit={explicit} geniusUrl={geniusUrl} /gt;  );  return (  lt;React.Fragmentgt;  lt;div className="border"gt;  lt;ulgt;  {tracks}  lt;/ulgt;  lt;/divgt;  lt;/React.Fragmentgt;  )  } }  

«Состояние» моего компонента содержит результат запроса API. Как это работает? Я прочитал несколько сообщений о вложенных объектах, но мой подход заключается в том, чтобы визуализировать «.. /gt; пункт для каждого трека, поэтому предлагаемые методы сообщений для меня не работают…. Мне нужно значение «geniusUrl» и «fullTitle» из вложенного объекта songInfo…

Большое спасибо!

ПРАВКА: Комментарий удален.

Ответ №1:

Итак, у вас response.data есть массив «дорожек». Каждая «дорожка» — это Объект. В настоящее время вы разрушаете свой «трек» вот так, в своем .map() методе:

 {isrc, duration, explicit, fullTitle, geniusUrl}  

Но…. fullTitle и geniusUrl не являются прямыми ключами вашего объекта «трек», а скорее songInfo являются ключом, поэтому вам придется настроить свое разрушение:

 {isrc, duration, explicit, songInfo: {fullTitle, geniusUrl}}  

Комментарии:

1. Спасибо! После долгих попыток ты показал мне, как это может быть легко… еще раз большое спасибо — решил мою проблему 🙂