2015-12-10 9 views
7

Gibt es eine Möglichkeit, ein String-Variable des Wert als Schlüssel für setState() zu benutzen?React.js setState() mit Variable für Schlüssel innerhalb der Schleife?

getInitialState: function() { 
    return { 
     foo: '', 
     bar: '' 
    } 
} 

someOtherHandler: function() { 
    var arr = ['foo', 'bar']; 
    var _this = this; 
    var number = Math.random(); 

    for (var i in arr) { 
     _this.setState({ arr[i]: number }); 
    } 

} 

React wirft einen Syntaxfehler mit der oben und arr Einstellung von [i] einer Variablen endet einen neuen Zustand Einstellung mit diesem Namen der Variablen.

Antwort

14

Sie können das Objekt vor dem Aufruf setState erstellen.

var newState = {}; 
newState[i] = number; 
_this.setState(newState); 

Alternativ, wenn Sie ES6 verwenden, können Sie die Verwendung eines computed property machen.

_this.setState({ [i]: number }); 

Allerdings wird dieser Code setState mehrmals aufrufen, ist es effizienter, es nur einmal anrufen. Erstellen Sie das aktualisierte Statusobjekt, und wenden Sie es anschließend an.

var newState = {}; 

for(var i in arr) { 
    newState[i] = number; 
} 

this.setState(newState); 
+0

Vielen Dank! Ich hatte eigentlich nur über eine ähnliche Frage ausführen, die im Wesentlichen mich auf dasselbe hin: http://stackoverflow.com/questions/29280445/reactjs-setstate-with-a-dynamic-key-name – cyoung

Verwandte Themen