无法使用Redux更新嵌套对象的属性

时间:2019-12-19 17:36:30

标签: reactjs redux redux-store redux-reducers

React中,我们有一个最佳实践,即不直接修改状态,即突变... 在Redux ...

中也很重要
/* initial state */
export const usersStartState = { users: { isLoggedIn: false } }

export default function users(state = usersStartState, action) {
    switch (action.type) {
        case actionTypes.users.IS_LOGGED_IN:
            return Object.assign({}, state,
                state.users.isLoggedIn = true)
        case actionTypes.users.IS_LOGGED_OUT:
            return Object.assign({}, state,
                state.users.isLoggedIn = false)
        default:
            return state
    }
};

上面的方法不起作用,但是有人可以帮助我如何正确更新该嵌套对象属性吗?

2 个答案:

答案 0 :(得分:1)

您可以做到

return {...state, users:{...state.users, isLoggedIn : true}}

答案 1 :(得分:1)

看起来您既在改变状态又在返回新的状态对象。您通过说(1, 3) 来改变状态,但是通过执行state.users.isLoggedIn = ..返回一个新的状态对象。

相反,也许只是做

return Object.assign(...)

一种替代方法是创建状态副本并对其进行修改

case actionTypes.users.IS_LOGGED_OUT:
  return { ...state, users: { ...state.users, isLoggedIn: false }};