Also ich habe zwei Eingabefelder:Wie wird der Zustand eines Objekts richtig aktualisiert (ReactJS + Redux)?
<TextField onChange={this.handleUserUsername.bind(this)}
value={this.props.userInfo.username}
/>
<TextField onChange={this.handleUserEmail.bind(this)}
value={this.props.userInfo.email}
/>
einmal eingegeben, würde Ich mag sie im Zustand eines Objekts speichern namens ‚userinfo‘, etwa so:
handleUserUsername(event){
this.props.actions.updateUsername(event.target.value)
}
handleUserEmail(event){
this.props.actions.updateEmail(event.target.value)
}
und die Aktion Schöpfer sind:
updateUsername: function(eventValue){
return {
type: 'UPDATE_USERNAME',
username: eventValue
}
},
updateEmail: function(eventValue){
return {
type: 'UPDATE_USERNAME',
email: eventValue
}
}
und das Reduzierstück ist:
function(userInfo={}, action){
switch(action.type){
case 'UPDATE_USERNAME':
return {
username: action.username
}
case 'UPDATE_EMAIL':
return {
email: action.email
}
Sobald Text in den Benutzernamen TextField eingegeben wurde, zeigt er an, was im TextField eingegeben wurde und speichert 'Z' für den 'Benutzernamen' und protokolliert Folgendes (im Beispiel wurde 'Z' eingegeben):
Dann, wenn ein Text, ‚M‘ in diesem Beispiel in die E-Mail TextField- eingegeben wird, wird der Benutzername Zustand ‚undefiniert‘, wenn es als Z bleiben soll, und E-Mail-Zustand nicht einmal gespeichert ist:
Im Protokoll für das Beispiel, was ich hoffe, zu sehen ist:
userInfo: Object
username: "Z"
email: "M"
Und ich bin mit dem folgenden Status und Aktionen zur Verfügung:
function mapStateToProps(state) {
return state
}
function mapDispatchToProps(dispatch) {
return {
actions: bindActionCreators(actions, dispatch)
}
}
Warum es die Speicherung korrekt ist nicht die Zustand für das Objekt 'userInfo'? Was wäre der richtige Weg, um ein solches Objekt zu aktualisieren? Schließlich möchte ich das 'userInfo'-Objekt in einem Array namens Benutzer speichern, wo es alle Benutzerinformationen speichern würde.
EDIT **
Als ich 'q' in den Benutzernamen Textfeld eingegeben, werden die folgenden Shows:
Dann, wenn ich eingeben 'M' im Passwort Textfeld, die beide nicht definiert werden jetzt:
EDIT 2 **
ich die Original-Beitrag unter EDIT aktualisiert ** mit neuen Protokollen. Es zeigt jetzt die Objektstatus-E-Mail an, aber beide werden undefiniert, sobald das zweite Textfeld irgendwelche Texte erhält. –
Aber meine Antwort ist immer noch aktuell für Sie, wie auch @ElodSzopos unten erwähnt, in Reducer sollten Sie das gesamte Statusobjekt (einschließlich E-Mail, Benutzername, Passwort) jedes Mal, wenn Sie Änderungen durch Aktionen – muphblu
Ich versuchte die Implementierung als solche wie ich zur Verfügung gestellt in EDIT 2 **, aber den folgenden Fehler erhalten: Unerwarteter Token (5: 8) bei, wo '...' beginnt, und kann nicht herausfinden, was los ist. –