所以我有两个输入字段:
<TextField onChange={this.handleUserUsername.bind(this)}
value={this.props.userInfo.username}
/>
<TextField onChange={this.handleUserEmail.bind(this)}
value={this.props.userInfo.email}
/>
一旦输入,我希望将它们存储在名为“userInfo”的对象状态中,如下所示:
handleUserUsername(event){
this.props.actions.updateUsername(event.target.value)
}
handleUserEmail(event){
this.props.actions.updateEmail(event.target.value)
}
动作创建器是:
updateUsername: function(eventValue){
return {
type: 'UPDATE_USERNAME',
username: eventValue
}
},
updateEmail: function(eventValue){
return {
type: 'UPDATE_USERNAME',
email: eventValue
}
}
而且减速器是:
function(userInfo={}, action){
switch(action.type){
case 'UPDATE_USERNAME':
return {
username: action.username
}
case 'UPDATE_EMAIL':
return {
email: action.email
}
但是一旦文本输入到用户名文本框中,它会显示在文本框中键入的任何内容,并正确存储“用户名”的“Z”,并记录以下内容(在示例中,键入了“Z”): 当文本“M”被输入到电子邮件TextField中时,用户名状态变为“未定义”,而应该保持为Z,电子邮件状态甚至没有被存储。 在示例的日志中,我希望看到的是:
userInfo: Object
username: "Z"
email: "M"
我正在使用以下内容来访问状态和操作:
function mapStateToProps(state) {
return state
}
function mapDispatchToProps(dispatch) {
return {
actions: bindActionCreators(actions, dispatch)
}
}
为什么它没有正确地存储“userInfo”对象的状态?更新这样一个对象的正确方法是什么?最终,我想将“userInfo”对象存储到名为“users”的数组中,其中它将存储所有用户信息。
编辑**
当我在用户名文本字段中输入“q”时,会显示以下内容: 当我在密码文本框中输入“m”时,两者现在都变成未定义:
编辑2 **
const registerReducer = function(userInfo={}, action){
switch(action.type){
case 'UPDATE_USERNAME':
return {
...userInfo,
username: action.username
}
case 'UPDATE_EMAIL':
return {
...userInfo,
email: action.email
}