首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React-Redux更新部分状态

React-Redux更新部分状态
EN

Stack Overflow用户
提问于 2021-08-16 20:38:10
回答 2查看 30关注 0票数 0

我的react-redux有以下初始状态

代码语言:javascript
复制
const initialState = {
    logged: false,
    user: null,
    company: null,
}

第一次登录时,我设置了状态数据

代码语言:javascript
复制
const data = action.payload.data;
const properties = action.payload.properties;
const notifications = action.payload.notifications;
return {
    ...state,
    logged: true,
    user: {
        id: data.UserID,
        firstName: data.UserFName,
        lastName: data.UserLName,
        email: data.UserEmail,
        securityLevel: parseInt(data.SecurityLevelID),
        notifications: {
            multiProp: notifications.MultiProp && parseInt(notifications.MultiProp) === 1 ? false : true
        }
    },
    company: {
        id: data.CompanyID,
        name: data.CompanyName,
        email: data.ContactEmail,
        leadSource: parseInt(data.LeadSourceCompanyID)
    }
}

然后,在我的项目的某个时刻,我只需要更新user.notifications.multiProp,所以我创建了一个名为UPDMULTIPROP的新类型,我正在执行以下操作:

代码语言:javascript
复制
case Types.UPDMULTIPROP:
    const userData = action.payload.data;
    return {
        ...state,
        user: {
            notifications: {
                multiProp: userData.notifications.MultiProp && parseInt(userData.notifications.MultiProp) === 1 ? false : true,
            }
        }
    }

但是,它将所有其他用户状态设置为undefined。如何仅更新multiProp

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-16 21:11:25

user也是一个对象,为了保持user状态不变,您还应该扩展user。

代码语言:javascript
复制
case Types.UPDMULTIPROP:
  const userData = action.payload.data;
  return {
    ...state,
    user: {
      ...state.user,
      notifications: {
        multiProp: userData.notifications.MultiProp && parseInt(userData.notifications.MultiProp) === 1 ? false : true,
      }
    }
  }
票数 1
EN

Stack Overflow用户

发布于 2021-08-16 21:15:47

要不变地更新嵌套对象,您需要再次扩展它。喜欢

user : { ...state.user, notifications : someValue }

就像这样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68808945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档