Не могу получить доступ к значениям в объекте в javascript, используя точку или массив - PullRequest
1 голос
/ 21 марта 2020

Таким образом, я получаю данные из внешнего API (OMDBAPI), и точные данные выглядят следующим образом с названием Star:

{"Search":[{"Title":"Star Wars: Episode IV - A New Hope","Year":"1977","imdbID":"tt0076759","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BNzVlY2MwMjktM2E4OS00Y2Y3LWE3ZjctYzhkZGM3YzA1ZWM2XkEyXkFqcGdeQXVyNzkwMjQ5NzM@._V1_SX300.jpg"},{"Title":"Star Wars: Episode V - The Empire Strikes Back","Year":"1980","imdbID":"tt0080684","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BYmU1NDRjNDgtMzhiMi00NjZmLTg5NGItZDNiZjU5NTU4OTE0XkEyXkFqcGdeQXVyNzkwMjQ5NzM@._V1_SX300.jpg"},{"Title":"Star Wars: Episode VI - Return of the Jedi","Year":"1983","imdbID":"tt0086190","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BOWZlMjFiYzgtMTUzNC00Y2IzLTk1NTMtZmNhMTczNTk0ODk1XkEyXkFqcGdeQXVyNTAyODkwOQ@@._V1_SX300.jpg"},{"Title":"Star Wars: Episode VII - The Force Awakens","Year":"2015","imdbID":"tt2488496","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BOTAzODEzNDAzMl5BMl5BanBnXkFtZTgwMDU1MTgzNzE@._V1_SX300.jpg"},{"Title":"Star Wars: Episode I - The Phantom Menace","Year":"1999","imdbID":"tt0120915","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BYTRhNjcwNWQtMGJmMi00NmQyLWE2YzItODVmMTdjNWI0ZDA2XkEyXkFqcGdeQXVyNTAyODkwOQ@@._V1_SX300.jpg"},{"Title":"Star Wars: Episode III - Revenge of the Sith","Year":"2005","imdbID":"tt0121766","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BNTc4MTc3NTQ5OF5BMl5BanBnXkFtZTcwOTg0NjI4NA@@._V1_SX300.jpg"},{"Title":"Star Wars: Episode II - Attack of the Clones","Year":"2002","imdbID":"tt0121765","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BMDAzM2M0Y2UtZjRmZi00MzVlLTg4MjEtOTE3NzU5ZDVlMTU5XkEyXkFqcGdeQXVyNDUyOTg3Njg@._V1_SX300.jpg"},{"Title":"Star Trek","Year":"2009","imdbID":"tt0796366","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BMjE5NDQ5OTE4Ml5BMl5BanBnXkFtZTcwOTE3NDIzMw@@._V1_SX300.jpg"},{"Title":"Star Wars: Episode VIII - The Last Jedi","Year":"2017","imdbID":"tt2527336","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BMjQ1MzcxNjg4N15BMl5BanBnXkFtZTgwNzgwMjY4MzI@._V1_SX300.jpg"},{"Title":"Rogue One: A Star Wars Story","Year":"2016","imdbID":"tt3748528","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BMjEwMzMxODIzOV5BMl5BanBnXkFtZTgwNzg3OTAzMDI@._V1_SX300.jpg"}],"totalResults":"2895","Response":"True"}

Я делаю это в реагировать нативно, и этот объект называется фильмы передаваться в качестве реквизита. Код выглядит следующим образом:

const MoviesList = props => {

    return 
    <Text>
        {props.movies.Search.forEach((movie) => {
            movie.Title
        })}
    </Text>
}   

Все, что я получаю, это undefined и ни одна из данных не отображается.

1 Ответ

1 голос
/ 21 марта 2020

Вы не можете использовать forEach, когда пытаетесь отобразить дочерние элементы / компоненты, поскольку forEach фактически не возвращает ничего нового, он просто перебирает существующую коллекцию. Вы можете вносить изменения в элементы по мере их зацикливания, но новая коллекция не создается и не возвращается.

Вы должны использовать map вместо этого.

Я не уверен, что такое Text, например, если это ваш собственный компонент или из библиотеки, но если это ваш собственный компонент, и вы хотите визуализировать заголовки внутри этого компонента, вы должны обернуть свой l oop внутри компонента <Text>, но передайте название <Text>.

См. ниже в MoviesList. js

<div>

  {props.movies.Search.map((movie) => {
    return <Text title={movie.Title}/>
  })}

</div>

Я сделал песочница для кода для полного кода.

РЕДАКТИРОВАТЬ

Если ответ от API возвращается как строка вместо объекта, вы можете используйте JSON.parse(YOUR_RESULTS), чтобы преобразовать вашу строку в объект.

Чтобы увидеть, являются ли результаты на самом деле строкой, вы можете выполнить YOUR_RESULTS.split("") и посмотреть, будет ли возвращен массив. Вы также можете сделать console.log(typeof YOUR_RESULTS). Если это на самом деле строка, "string" будет зарегистрирован в консоли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...