如何正确更新对象传播的react redux状态?

时间:2017-12-24 03:56:57

标签: reactjs redux state ecmascript-next

我在localStorage中保存了一个用户状态,在身份验证后看起来像这样:

  "user" : {
  "first_name":"test19", 
  "last_name":"test19",
  "email":"test19@testmail.com",
  "token" : "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjcyMCwia"
   ...

现在我还有一个表单,一旦服务器返回更新的信息就触发一个动作来更新用户的状态,我的reducer看起来像这样:

case userConstants.UPDATE_USER:
      return {
        loggedIn: true,
        ...state,
        user: action.user
      };

到目前为止,除了来自服务器的返回对象不包含令牌外,上面的reducer的结果是一个没有我需要的令牌的新状态。

任何想法我做错了什么?谢谢! :)

2 个答案:

答案 0 :(得分:2)

如果我正确理解您的问题,您希望避免在更新后丢失令牌。像这样更新你的减速机。

case userConstants.UPDATE_USER:
    return {
        loggedIn: true,
        ...state,
        user: {
            ...action.user,
            token: state.user.token
        }
    };

这里的想法是,在返回新状态之前,您将覆盖action.user的token属性和状态中的token属性(不变异)。

答案 1 :(得分:0)

首先添加状态,它将包含旧版本的用户,在主状态被破坏后覆盖用户:

case userConstants.UPDATE_USER:
      return {
        loggedIn: true,
        ...state,
        user:{
           ...action.user,
           ...state.user,
        },
      };