Поэтому у меня есть два поля ввода:Как правильно обновить состояние объекта (ReactJS + Redux)?
<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
}
Но как только текст вводится в имя пользователя TextField, он отображает все, что он напечатал в TextField, и правильно сохраняет «Z» для «имени пользователя» и записывает в журнал следующее (в примере, «Z» был введен):
Затем, когда текст, «М» в этом примере, вводится в электронный TextField, состояние имя пользователя становится «неопределенным», когда оно должно остаться как Z, и адрес электронной почты состояние даже не сохраняется:
В журнале для примера, что я надеюсь увидеть это:
userInfo: Object
username: "Z"
email: "M"
И я использую следующие для доступа состояния и действия:
function mapStateToProps(state) {
return state
}
function mapDispatchToProps(dispatch) {
return {
actions: bindActionCreators(actions, dispatch)
}
}
Почему не так правильно хранить для объекта 'userInfo'? Каким будет правильный способ обновления такого объекта? В конце концов я хочу сохранить объект userInfo в массив, называемый пользователями, где он будет хранить всю информацию о пользователе.
EDIT **
Когда я вошел в «д» в имени пользователя, текстовое поле следующие шоу:
Тогда, когда я вхожу «м» в пароль текстовое поле, оба становятся неопределенными Сейчас:
EDIT 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
}
Я обновил оригинальный пост под EDIT ** с новыми бревнами. Теперь он показывает адрес состояния объекта, но оба они становятся неопределенными, когда второе текстовое поле получает какие-либо тексты. –
Но мой ответ по-прежнему актуальен для вас, а также @ElodSzopos, упомянутый ниже, в редукторе вы должны возвращать весь объект состояния (включая адрес электронной почты, имя пользователя, пароль) каждый раз, когда вы вносите изменения в действия. – muphblu
Я попытался реализовать как таковой, в EDIT 2 **, но получив следующую ошибку: Неожиданный токен (5: 8), где начинается «...», и не может понять, что случилось. –