、SET_USER
経由でセットアップされますいくつかのプロパティ(name
、color
、age
)とuser
オブジェクト、と私は、次のコードでそれを行うとき、私はまだ、UPDATE_USER_NAME
経由user
オブジェクトの内部name
プロパティを更新したいと思います下に下に入れてUPDATE_USER_NAME
にループすると、name
プロパティは更新されません。Redux + Reactでネストされたオブジェクトのプロパティを更新するには?
私は間違っていますか? user: {action.name, ...state.user}
のようなものを実行すると、オブジェクトuser
が更新されて動作しますが、オブジェクト内の現在のname
を更新するのではなく、action.name
から別の新しいプロパティを作成するだけです。これは、現在のstate.user
にuser
を設定し、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
}
}
「マージされた」新しいオブジェクト作成を行う良い方法は、['Object.assign'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/)を使うことですGlobal_Objects/Object/assign)APIを使用します。 – ctrlplusb
例: 'user:Object.assign({}、state.user、{name:action.name})' – ctrlplusb