所以,我有兩個輸入字段:如何正確更新對象的狀態(ReactJS + Redux)?
<TextField onChange={this.handleUserUsername.bind(this)}
value={this.props.userInfo.username}
/>
<TextField onChange={this.handleUserEmail.bind(this)}
value={this.props.userInfo.email}
/>
一旦進入
,我想將它們存儲在一個名爲「用戶信息」的對象的狀態,就像這樣:
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'):
然後,當在這個例子中一文中,「M」,輸入到電子郵件文本字段,用戶名狀態變爲「未定義」時,它應該保持爲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',無論是不確定的現在:
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
}
我下編輯**用新日誌更新原來的職位。它現在顯示對象狀態電子郵件,但是一旦第二個文本字段接收到任何文本,它們都會變得不確定。 –
但是我的回答對你來說仍然是實際的,因爲@ElodSzopos在下面提到,在reducer中,每當你通過動作進行修改時,你應該返回整個狀態對象(包括電子郵件,用戶名,密碼)。 – muphblu
我試過像我這樣提供在編輯2 **,但得到以下錯誤:意外的令牌(5:8)在'...'開始,並不能找出什麼是錯的。 –