Hintergrund: Ich versuche, einige UI-Elemente zu verwenden Reagieren Sie auf eine JSON-Antwort von einem Webservice auf Basis zu aktualisieren, aber weil ich viele Elemente haben um gerendert zu werden, versuche ich die Bandbreite zu verringern, indem ich nur json ziehe, wenn der HashCode eines Elements aktualisiert wird. Im Rahmen meiner Anwendung kann ich das asynchrone Verhalten meiner Ajax-Aufrufe nicht aktualisieren. Was wäre der richtige Weg, um das Update auf meine Elemente erst nach dem asynchronen Aufruf zu erzwingen?
Ich weiß, Einstellungsstatus in WillUpdate ist falsch.Reagieren: Asynchroner Aufruf Zustand vor dem endgültigen Rendern-Methode aufgerufen wird aktualisiert
Beispiel:
getInitialState: function getInitialState() {
return { hash: 0, json: {}};
},
//Only get the step asJSON if the hash is updated
shouldComponentUpdate: function(nextProps, nextState) {
return this.state.json.hash != nextState.json.hash;
},
tick: function(){
this.updateHash();
},
updateHash: function updateHash(){
something.getUpdateHash(function(data){
var hashR = data.responseJSON;
this.setState({hash: hashR});
}.bind(this));
},
updateJSON: function(){
//This is an asynchronous call
something.getJSON(function(data){
var stepJ = jQuery.parseJSON(data.responseJSON);
this.setState({json: stepJ});
}.bind(this));
},
componentWillMount: function(){
this.updateJSON();
},
componentDidMount: function(){
this.interval = setInterval(this.tick, 10000);
},
componentWillUpdate: function(nextState, nextProps){
//Way to update json state w/o affecting state?
},
render: function render() {
/** Only do render after updateJSON is complete **/
}
Ich hatte nicht daran gedacht! Danke +1 – Chrizt0f