【问题标题】:How to update a react redux state with object spread properly?如何使用正确传播的对象更新反应还原状态?
【发布时间】:2018-06-06 01:52:58
【问题描述】:

我在 localStorage 中保存了一个用户状态,经过身份验证后如下所示:

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

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

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

到目前为止一切顺利,只是从服务器返回的对象不包含令牌,并且上面的 reducer 的结果是一个没有我需要的令牌的新状态。

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

【问题讨论】:

    标签: reactjs redux state ecmascript-next


    【解决方案1】:

    先添加状态,会包含旧版本的用户,主状态销毁后覆盖用户:

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

    【讨论】:

    • 抱歉,您的解决方案根本没有更新状态,是因为 ...state.user 覆盖了 ...action.user 吗?
    【解决方案2】:

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

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

    这里的想法是,在返回新状态之前,您将覆盖 action.user 的 token 属性,使其处于状态(没有变异)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      • 2018-10-30
      • 1970-01-01
      • 2020-02-27
      • 2019-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多