2016-10-05 9 views
2
したがって、最初

SET_USER経由でセットアップされますいくつかのプロパティ(namecolorage)とuserオブジェクト、と私は、次のコードでそれを行うとき、私はまだ、UPDATE_USER_NAME経由userオブジェクトの内部nameプロパティを更新したいと思います下に下に入れてUPDATE_USER_NAMEにループすると、nameプロパティは更新されません。Redux + Reactでネストされたオブジェクトのプロパティを更新するには?

私は間違っていますか? user: {action.name, ...state.user}のようなものを実行すると、オブジェクトuserが更新されて動作しますが、オブジェクト内の現在のnameを更新するのではなく、action.nameから別の新しいプロパティを作成するだけです。これは、現在のstate.useruserを設定し、nameを上書きします

case actionTypes.UPDATE_USER_NAME: 
     return { 
     ...state, 
     user: { 
      ...state.user, 
      name: action.name, 
     } 
     } 

const DEFAULT_STATE = { 
    user: {}, 
} 

export default function(state = DEFAULT_STATE, action) {\ 
    switch(action.type) { 
    case actionTypes.SET_USER: 
     return { 
     ...state, 
     user: action.user, 
     } 

    case actionTypes.UPDATE_USER_NAME: 
     return { 
     ...state, 
     user: { 
      name: action.name, 
      ...state.user, 
     } 
     } 

    default: 
     return state 
    } 
} 
+0

「マージされた」新しいオブジェクト作成を行う良い方法は、['Object.assign'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/)を使うことですGlobal_Objects/Object/assign)APIを使用します。 – ctrlplusb

+0

例: 'user:Object.assign({}、state.user、{name:action.name})' – ctrlplusb

答えて

5

は、あなただけのスプレッドのビットを順序を変更する必要があります。スプレッドはObject.assign(左から右)のように機能します。これは、オブジェクトリテラルで同じキーを割り当てることが「最後のものが勝つ」ためです。

関連する問題