Я пытаюсь изучить основы полнофункционального приложения React и столкнулся с очень странной проблемой, связанной с вызовами API.
Я хочу получить список трейлеров из базы данных, которые возвращаются в виде массива объектов.Затем я использую обещание, чтобы зациклить этот массив и сделать отдельный вызов API для каждого элемента в массиве, чтобы добавить пару ключ-значение к объекту.После того, как я построил этот массив объектов, я установил его в состояние моего приложения, а затем передал его через подпорку дочернему компоненту, который должен отобразить список элементов на основе информации в массиве.
Прямо сейчас консоль регистрирует массив, который получает компонент, и все данные присутствуют, однако каждое поле может быть отображено, кроме того, которое добавлено в цикл forEach.
Я удалил вызов API изцикл forEach, и вместо этого просто установите статическое значение в цикле, и информация будет отображаться правильно, как и ожидалось.Так что я уверен, что проблема в том, что вызов API находится в цикле.Я не могу понять, почему, хотя.Журнал показывает, что массив завершен, поэтому, похоже, не имеет смысла, что рендер не может найти данные.
// The API call
loadUserAndTrailers = () => {
let trailers = [];
axios.get("http://localhost:5000/api/trailers")
.then (res => {
trailers = res.data;
})
.then (() => {
trailers.forEach(trailer => {
axios.get(`http://localhost:5000/api/votes/user/${this.state.user.id}/${trailer.TrailerID}`)
.then (res => {
const vote = res.data[0].Vote;
trailer.vote = vote;
})
})
})
.then (() => {
this.setState({trailers: trailers});
})
}
// The child component
const TrailerList = props => {
console.log(props)
const trailers = props.trailers.map(trailer => {
return <div>{trailer.vote}</div>
});
return <div>{trailers}</div>;
};
// The return in the parent component
return (
<div className="container">
<div className="content">
<h1>Trailers</h1>
<div className="trailers">
<TrailerList trailers={this.state.trailers}></TrailerList>
</div>
</div>
</div>
);
console.log (props) показывает мне законченный массив смассив объектов с этим значением ключа существует {голосования: 1}, но он ничего не отображает.Как это может быть?Я уже два дня бьюсь головой о стену, но я по общему признанию, плохо знаком с API и обещаниями.У меня сложилось впечатление, что обещание должно убедиться, что вызов завершен, прежде чем перейти к следующему шагу, и мое должным образом зарегистрированное состояние, кажется, подразумевает, что этот аспект кода функционирует, как ожидалось.