我有一个状态,里面有多个对象。现在,我可以修改第一级中的所有元素,例如 step 属性。但是我想知道如何在状态内部修改对象中的元素。
初始状态
const initialState = {
step : 1,
user: {
identification : {
email: '',
username: '',
},
localization: {
address: '',
country: '',
}}
我的有效载荷是这个对象:
identification : {
email: "some@html.com"
username: "s032190" }
我的 rootReducer 是这样:
function rootReducer(state = initialState, action) {
switch (action.type) {
case ADD_USER:
return { ...state, user: action.payload }
case CHANGE_STEP:
return { ...state, step: action.payload }
case ADD_FIELD:
Object.keys(state.altaUsuario).forEach (cat => {
return { ...state.user, [cat] : action.payload}
})
default:
return state
}
};
使用循环好吗?我尝试了地图或foreach,但没有任何效果。 我还尝试在传播操作符中调用属性,如下所示:
return { ...state, altaUsuario[cat] : action.payload}
但是它给了我一个语法错误。
如有必要,我还可以修改有效负载。
有什么主意吗?
答案 0 :(得分:2)
您可以尝试这样的事情
return { ...state,user : {...state.user ,identification :action.payload }}
答案 1 :(得分:0)
如果您的action.payload为
{
identification : {
email: "some@html.com"
username: "s032190"
}
}
您必须覆盖标识属性
return { ...state, user: { ...state.user, identification: action.payload.identification}