2017-02-07 3 views
0

In Reaction vorausgesetzt, ich habe eine ganzzahlige Variable namens myProperty, die von getDafaultProps zurückgegeben wird, wenn ich console.log (myProperty) vor und nach dem Aufruf von this.setProps (myProperty + 1) in einer Update-Funktion Die Konsole protokolliert den gleichen Wert für myProperty. Die Eigenschaft wird nach dem Ende der Funktion aktualisiert, und das nächste Mal, wenn ich meine Funktion myProperty aufruft, ist der neue Wert, aber weiß jemand warum oder wird mir nicht erklärt, warum myProperty nicht sofort aktualisiert wird, wenn this.setProps aufgerufen wird ?this.setProps nicht automatisch aktualisieren

danke, dass Sie sich die Zeit genommen haben, zu antworten. ein entsprechender Code unter

getDefaultProps: function() { 
    return { colorIndex: -1 }; 
}, 
update: function() { 
    console.log("clicked and index is " + this.props.colorIndex); //returns -1 
    this.setProps({colorIndex: this.props.colorIndex + 1}); 
    console.log("index is now " + this.props.colorIndex); /still returns -1 
}, 
+0

Wenn Sie eine Variable mit Wertänderungen haben, sollten Sie 'setState' und' this.state' -Objekt –

+0

verwenden, da ich die Änderung nicht finden konnte, dachte ich. Liegt es daran, dass es sich um eine asynchrone Funktion handelt und ich gerade keine Zeit hatte, es zu aktualisieren, wenn ich die Konsole logge? Nur ein Gedanke. – woodwick

+1

Warum verwenden Sie die veralteten 'setProps' an erster Stelle? Ich glaube nicht einmal, dass es in der aktuellen Reaktion ist. (Bestätigt, in 0.14 entfernt; https://github.com/facebook/react/pull/5570) In jedem Fall würde ich annehmen, dass es wie 'setState' nicht sofort passiert. Siehe auch http://stackoverflow.com/a/25142742/438992. Vor über zwei Jahren. –

Antwort

1

Beiden setState und SetProps nicht sofort mutieren - Von Reagiert Dokumentation:

https://facebook.github.io/react/docs/react-component.html#setstate

setState() nicht sofort this.state mutieren, sondern schafft einen anstehend Übergang. Der Zugriff auf this.state nach dem Aufruf dieser Methode kann möglicherweise den vorhandenen Wert zurückgeben. Es gibt keine Garantie für synchronen Betrieb von Anrufen zu setState und Anrufe können für Leistungssteigerungen gebündelt werden.

Ihre Update-Methode sollte setState aufrufen, und Ihre Render-Methode wird auf der Grundlage des aktualisierten Status ausgeführt.

+0

Danke für den Verweis auf die spezifische Dokumentation. – woodwick

Verwandte Themen