2017-02-20 1 views
1

Ich behalte den Geburtstag im Auge und muss den Status ändern, während der Benutzer tippt, aber das Problem ist, dass eine neue Instanz meines Geburtstagsarrays erstellt wird, wenn der Benutzer den Status überschreibt. Irgendeine Idee, wie der Geburtstagindexzustand geändert werden kann, d. H. Wenn sie eine Monatsposition 0 eingeben, wird sich ändern, Datumsposition 1 wird sich ändern, Jahrposition 3 wird sich ändern.Wie mutiere ich ein Array innerhalb meines Status mutieren?

this.state = { 
    dob : ["", "", ""] 
}; 



onInputChange(event) { 
    const type = event.target.name; 
    var dob = ["", "", ""]; 
    if(type == "month") { 
     birthday[0] = event.target.value; 
     this.setState({ dob }); 
    } else if(type == "date") { 
     birthday[1] = event.target.value; 
     this.setState({ dob }); 
    } else if(type == "year"){ 
     birthday[2] = event.target.value; 
     this.setState({ dob }); 
    } 
    } 

Antwort

1

Grund ist onchange jeden Wert, den Sie eine neue Instanz von dob erstellen, und ersetzt den Wert des Staates durch die neu array erstellt, statt dass der Wert von dob von Staat kopieren und dann den spezifischen Wert aktualisieren und setzen, dass array in den Zustand zurück, es wie folgt schreiben:

this.state = { 
    dob : ["", "", ""] 
}; 

onInputChange(event) { 
    const type = event.target.name; 
    var dob = this.state.dob.slice(); 
    if(type == "month") { 
     dob[0] = event.target.value; 
    } else if(type == "date") { 
     dob[1] = event.target.value; 
    } else if(type == "year"){ 
     dob[2] = event.target.value; 
    } 
    this.setState({ dob }); 
} 

Überprüfen sie die Arbeits fiddle: https://jsfiddle.net/drffr0ww/

+0

das funktioniert nicht. Das ist was passiert https://puu.sh/uc7tq/e8646eab30.png – joethemow

+0

aktualisiert meine Antwort mit der Arbeit Geige überprüfen, dass :) –

Verwandte Themen