如何在 Redux + React 中更新嵌套对象 属性?
How to update nested object property in Redux + React?
因此,首先,通过 SET_USER
设置具有一些属性(name
、color
、age
)的 user
对象,然后我想通过 UPDATE_USER_NAME
更新 user
对象内的 name
属性,但是当我使用下面的代码和 [=19= 中的嵌套循环执行此操作时], name
属性 没有更新。
我做错了什么?如果我执行类似 user: {action.name, ...state.user}
的操作,对象 user
会更新并工作,但这只会从 action.name
创建另一个新的 属性 而不是更新当前的 name
在 user
对象中。
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
}
}
您只需要稍微改变点差的顺序:
case actionTypes.UPDATE_USER_NAME:
return {
...state,
user: {
...state.user,
name: action.name,
}
}
这会将 user
设置为当前 state.user
,然后覆盖 name
。传播方式类似于 Object.assign
(从左到右)。这是因为在对象文字中分配相同的键将是 "last one wins".
因此,首先,通过 SET_USER
设置具有一些属性(name
、color
、age
)的 user
对象,然后我想通过 UPDATE_USER_NAME
更新 user
对象内的 name
属性,但是当我使用下面的代码和 [=19= 中的嵌套循环执行此操作时], name
属性 没有更新。
我做错了什么?如果我执行类似 user: {action.name, ...state.user}
的操作,对象 user
会更新并工作,但这只会从 action.name
创建另一个新的 属性 而不是更新当前的 name
在 user
对象中。
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
}
}
您只需要稍微改变点差的顺序:
case actionTypes.UPDATE_USER_NAME:
return {
...state,
user: {
...state.user,
name: action.name,
}
}
这会将 user
设置为当前 state.user
,然后覆盖 name
。传播方式类似于 Object.assign
(从左到右)。这是因为在对象文字中分配相同的键将是 "last one wins".