Реквизит являются неизменными.Это
props.apiRequests[apis[i]].done = true
является ошибкой и не приводит к повторной визуализации дочернего компонента.
Состояние, полученное из асинхронного запроса, должно храниться в состоянии компонента, setState
запускает повторную визуализацию.componentWillMount
устарело, потому что его неправильно использовали для асинхронных подпрограмм.Оно должно быть:
return class extends React.Component {
this.state = {};
componentDidMount() {
let apis = Object.keys(props.apiRequests);
for(let i = 0; i < apis.length; i++) {
axios.get(props.apiRequests[apis[i]].url).then((resp) => {
this.setState({ apis[i]]: resp.data });
})
}
}
render() {
return (<Elem data={this.state} />)
}
}
В зависимости от того, как ожидается получение данных, обновления состояния могут выполняться в пакетном режиме с помощью Promise.all
.