I have a problem with one of my React components. I think AJAX doesn't load all the content from external server before React renders the ChildComp
component.
Above you can see the tree of response which is coming from server. And this is my component's code:
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>
)
}
});
This is working just fine, but if I change my return to:
return (
index.id + " " + index.order.id
)
id is undefined. And all of the other properties of order object. Why is it like this? If I console.log
my response after success
function it gives all the data (like in picture). My guess is that only the first objects are loaded when React renders the component and after that all other inner objects are loaded. I can't really say if that's the case (sounds so weird) nor I can't say how to solve this out.
I tried also something like this
success: function(data){
self.setState({
response: data
}, function(){
self.forceUpdate();
})
}.bind(this)
but still re-render happens before my console.log(data)
is triggered. How to wait for AJAX response and only after that render the component?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…