ich total Neuling bin zu ReactJS und es ist ein wenig seltsam Verhalten, wenn ich erstellt Zähler AppReactJS mit ES6 Klasse im Zustand: Änderung nur einmal
https://jsfiddle.net/8f5tqr74/2/
class CounterViewModel {
constructor() {
this.value = 5;
}
tick() {
//cannot move logic of this method to sendTick complex logic will be here
this.value++;
}
}
var Counter = React.createClass({
getInitialState: function() {
return new CounterViewModel();
},
sendTick: function() {
console.log("Before:",this.state);
var stateObj = this.state;
stateObj.tick();
this.setState(stateObj);
console.log("After:",this.state);
},
render: function() {
return <div>
{this.state.value}
<button onClick={this.sendTick}>Increase</button>
</div>
}
});
ReactDOM.render(<Counter />, document.getElementById('container'));
Mein Problem ist Dieser Code funktioniert nur erstes Mal, wenn ich klicken Nachdem ich dies in Developer Konsole
//first click
Before: CounterViewModel {value: 5}
After: CounterViewModel {value: 6}
//second click
Before: Object {value: 6}
im zweiten Klick cla habe s Zustand gespült Objekt, jedoch habe ich nicht machen Manipulationen in diesem Objekt
Meine Fragen sind:
1) Warum reagiert bündig Objektklasse nach setState?
2) Warum reagiert nicht flush Klassenobjekt nach getInitialState?
3) Wie kann ich komplexe Logik in Zustandsobjekt in React setzen? Ich weiß, ich Objekt mit einem erhöhten Wert neu erstellen kann und alles wird gut funktionieren (siehe Code unten)
class CounterViewModel {
constructor(value) {
this.value = value;
}
}
var Counter = React.createClass({
getInitialState: function() {
return new CounterViewModel(5);
},
sendTick: function() {
this.setState(new CounterViewModel(this.state.value+1))
},
render: function() {
return <div>
{this.state.value}
<button onClick={this.sendTick}>Increase</button>
</div>
}
});
ReactDOM.render(<Counter />, document.getElementById('container'));
Ich empfehle, die änderbare Zählerinstanz nicht direkt im Komponentenstatus zu speichern. Kopieren Sie stattdessen die 'value' -Eigenschaft des Zählers in den Komponentenstatus – naomik
Das ist auch in Ordnung!Aber das wird nicht zur dritten Frage passen, die lautet: "Wie kann ich komplexe Logik in das Zustandsobjekt von React einfügen" :-P – QoP