Чтобы заполнить содержимое компонента React, я использую запрос AJAX в кубе метода componentWillMount, где я изменяю this.state в результате выполнения запроса. Проблема заключается в том, что метод рендеринга выполняется так же, как и до завершения запроса, как после изменения this.state с помощью setState. Более того, если такой компонент отображает один, который также используется AJAX, количество вызовов рендеринга растет как сила двух.React + AJAX компонентный рендеринг
Как сделать компонент визуализирован только после получения необходимых данных?
var News = React.createClass({
getInitialState: function() {
return {
news: [],
page: 1
};
},
componentWillMount: function() {
let xmlhttp = getXmlHttp();
xmlhttp.open("POST", "server/news.php", true);
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xmlhttp.onreadystatechange=() => {
if (xmlhttp.readyState != 4) return;
clearTimeout(timeout);
if (xmlhttp.status == 200) {
this.setState({
news: eval(xmlhttp.responseText.toString())
});
} else {
handleError(xmlhttp.statusText);
}
};
xmlhttp.send('page=' + this.state.page);
var timeout = setTimeout(function(){ xmlhttp.abort(); handleError("Request time over") }, 10000);
},
render: function() {
let itemList = this.state.news.map(function(item, iterator){
return (
<NewsItem
niTitle={item[0]}
niText={item[1]}
niDate={item[2]}
niImg={item[3]}
key={"ni " + iterator}
/>
);
});
return (
<div>
{itemList}
<PageChanger page={this.state.page}/>
</div>
);
}
});
@svnav Вы могли бы рассмотреть вопрос о принятии 'props' из' ' к' ' и делать звонки пакетного API из' ' или компонент контроллера обертывание. –