Я использую API Звездных войн для практики, но натолкнулся на странную ошибку.Я почти уверен, что у меня проблема, но я не знаю достаточно об этих процессах, чтобы найти проблему.
Я создаю карты профиля с этой информацией, но когда я пытаюсь заменитьURL-адрес homeworld с фактическим именем, я не могу изменить значение, которое отображается в моем элементе реакции.
Это уменьшенная версия объекта JSON, которую я получаю из API.
{
"name": "Luke Skywalker",
"height": "172",
"mass": "77",
"birth_year": "19BBY",
"gender": "male",
"homeworld": "https://swapi.co/api/planets/1/",
},
Я пытался заменить значение url homeworld именем фактического homeworld, прежде чем сохранить его в моем массиве this.state
.Я попытался сделать вызовы извлечения из файлов элементов (это не совсем правильно).Поэтому я взломал код и посмотрел, как он меняется с console.log();
.Это не самая красивая.
fetch('https://swapi.co/api/people/')
.then(response => {
return response.json();
})
.then(array => {
console.log(array.results);
Promise.all(array.results.map(character => {
console.log(character.homeworld)
let home_url = character.homeworld;
fetch(home_url)
.then(home => {return home.json()})
.then(home_json => character.homeworld = home_json.name)
}))
.then(() => {
console.log(array.results)
this.setState({characters:array.results})
});
});
console.log();
показывает, что значение для homeworld было изменено на строку 'Tatooine'
.Это то же самое, вплоть до карты профиля.Так что я ожидал, что это будет значение в карточке, равное 'Tatooine'
, но я получаю "https://swapi.co/api/planets/1/"
.
. На данный момент я не знаю, где мой недостаток знаний.Я не уверен, что это проблема с JSON, React, Fetch / Promises.Так что, если кто-то сможет предложить какое-то понимание этого вопроса, это было бы здорово.Я могу добавить больше кода к сообщению, если это необходимо.Ура!