Warum, wenn ich einen Zustand ändere, alle anderen Änderungen? Wie kann man das verhindern? Innerhalb einer Funktion erstelle ich zwei Zustände mit dem data
dann diese beiden Zustände nach unten auf das Kind prop passieren erhalten:Funktion ändert zwei Zustände statt einer
Parent:
...
// getInitialState: foo and bar
...
// An ajax calls this with an array data
// My two states: foo and bar
getData(data){
this.setState({ foo: data, bar: data });
}
// Render
<Child myFoo={this.state.foo} myBar={this.state.bar} />
Kind:
getInitialState(){
return{
childFoo: this.props.myFoo,
childBar: this.props.myBar
}
},
valueChange(i, e){
// i is passed in as a number when this function is called.
// to show how "i" is passed in is not important
e.preventDefault();
var obj = this.state.childFoo;
var num = obj.find(p => i === p.id);
// This changes both of my states! Why?
num.unit_amount = e.target.value;
}
Could jemand erklären, warum childBar
ändert sich auch? Ich muss nur eins ändern und dann das andere verwenden, um Werte mit zu vergleichen.
das Kind Beispiel ist nicht wirklich klar, können Sie es semplify? Was ist ChildBar? – Carlo
childBar sollte nicht geändert werden, da Sie es nur in getInitialState festlegen. Es kann sich ändern, nur wenn Sie es woanders aktualisieren, oder mount-unmount der untergeordneten Komponente (wenn Sie null oder undefined anstelle von Kind zurückgeben) – degr
@Carlo Es ist klar. 'childBar' ist dasselbe wie' childFoo'. Diese beiden erhalten ihre Daten aus dem parant prop state. – Sylar