Javascript-更新不可变记录内对象的值

问题描述 投票:0回答:1

我有一个这样的不可变Javascript对象(来自不可变库)

const myObj = Immutable.Record({
  id: 1,
  myObject: {
    firstValue: false,
    secondValue: false,
  },
});

我想使用Immutable.Record类的set方法将firstValue属性更新为true,但是由于该对象已被Flux用作React状态,因此我想一次完成此操作行,像这样:

reduce(state, action){
    switch(action.type){
        case ActionTypes.CHANGE_VALUE:
            //The value to change is stored in action.value
            return state.set("myObject", //AddCodeHere);
    }
}

action.value变量是必需的,因此我必须使用该变量来更新该值。

我该怎么做?

编辑

我找到了答案(有点复杂,但是有效)。它使用ES6的最新功能之一,Object.fromEntries方法。

return state.set(
          "myObject",
          Object.fromEntries(
            Object.entries(state.get("myObj")).map(([k, v]) =>
              k === action.value ? [k, !v] : [k, v]
            )
          )
        );
javascript object javascript-objects immutability
1个回答
0
投票

我从未使用过Flux,但我认为Redux可能是同一回事。尝试使用此Immutable Update Patterns

return {
  ...state,
  myObject: {
    ...state.myObject,
    firstValue: true
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.