首页 > 解决方案 > 在归一化数据中使用 immer 和 es6 更新 redux 存储中的部分对象(嵌套)

问题描述

我有一家具有全局更新操作的商店

我只想更新部分数据,我没有获得可以再次标准化的完整数据

我的商店是:

{
  store:{
      studentes:{
         "1": {
            "name": {
               "second": "xxx",
               "third": "bbbbb"
            }
            "age": 60 
             
          }
    }
  }
}

在标准化数据后初始化

现在我只想更新年龄

如何使用 Es6 或 immer 实现这一目标?

我不想传递对象中的每个变量并更新如下:


  inside student reducer:

   draft[id].name.secondName = "boo"
   draft[id].name.thirdName = "xx"

我试过这样:

 return draft = {..draft ,...data}

但这将替换所有对象

我的服务器响应是这样的:

 "data":{
     "name" : {
        "second" :"dddd"
     }
  }

这里我只得到了部分内部数据

这是一个很大的对象。所以我正在寻找通用的更新

标签: reactjstypescriptreduxecmascript-6normalization

解决方案


因为我们在 ES6 中有对象解构,你可以使用它。

let draft = {
     ...draft,
     name: {
          ...draft.name,
          second: 'joe'
     }
}

因此,通过这种方式,实际值draft将首先插入新变量中。然后来到name键,...draft.name将所有值插入draft.name到该键的值中,除了second将具有 value的键'joe'


推荐阅读