У меня проблема с одним из моих компонентов React. Я думаю, что AJAX не загружает весь контент с внешнего сервера, прежде чем React отобразит компонент ChildComp
.Как ждать ответа AJAX и только после этого визуализировать компонент?
Выше вы можете увидеть дерево ответ, который приходит от сервера. И это код моего компонента:
var ChildComp = React.createClass({
getInitialState: function(){
return {
response: [{}]
}
},
componentWillReceiveProps: function(nextProps){
var self = this;
$.ajax({
type: 'GET',
url: '/subscription',
data: {
subscriptionId: nextProps.subscriptionId //1
},
success: function(data){
self.setState({
response: data
});
console.log(data);
}
});
},
render: function(){
var listSubscriptions = this.state.response.map(function(index){
return (
index.id
)
});
return (
<div>
{listSubscriptions}
</div>
)
}
});
Это работает просто отлично, но если я могу изменить свое возвращение к:
return (
index.id + " " + index.order.id
)
идентификатор не определен. И все остальные свойства объекта заказа. Почему так? Если I console.log
мой ответ после success
функции, он дает все данные (как на картинке). Я предполагаю, что только первые объекты загружаются, когда React отображает компонент, и после этого загружаются все остальные внутренние объекты. Я не могу сказать, если это так (звучит так странно), и я не могу сказать, как это решить.
Я попробовал также что-то вроде этого
success: function(data){
self.setState({
response: data
}, function(){
self.forceUpdate();
})
}.bind(this)
, но все еще пересборку происходит перед моим console.log(data)
срабатывает. Как ждать ответа AJAX и только после этого сделать компонент?
Чтобы гарантировать, что данные ответа отформатированы так, как вы хотите, вы должны добавить 'dataType:" json "' в запрос ajax. Кроме того, вы можете попробовать также зарегистрировать новое состояние, поскольку оно получено в 'shouldComponentUpdate'. И, наконец, проверьте, что - если есть - свойства находятся на 'index.order'. Возможно, он содержит строку вместо свойств. –