Метод рендеринга вызывается, когда компонент монтируется впервые, и снова, когда ваши данные получены и состояние изменилось.Вот почему вы видите, что метод рендеринга вызывается дважды.
componentWillMount()
устарел в Реакте 16.3.Вы должны использовать componentDidMount()
для извлечения данных, и вы должны ожидать, что ваш компонент будет отображаться хотя бы один раз, прежде чем ваши данные будут извлечены, поэтому вам нужно будет отобразить либо null
, либо состояние загрузки, прежде чем данные будут извлечены.Я привел пример того, как вы можете проверить, правильно ли он был загружен, и показать сообщение о загрузке.
class App extends React.Component {
constructor() {
super();
this.state = {
check: true,
repositories: [],
commits: [],
};
}
componentDidMount() {
this.fetchData();
this.fetchNumberOfCommits();
}
fetchData() { /*...*/ }
fetchNumberOfCommits() { /*...*/ }
isLoaded() {
return this.state.respositories.length > 0;
}
render() {
const { repositories } = this.state;
if(isLoaded) {
return repositories.map(repo => {
return (
<Api
repo={repo.name}
createdDay={repo.createdDay}
/>
);
});
}
return <h1>Loading repos...</h1>;
}
}