我有一个这样的不可变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]
)
)
);
我从未使用过Flux,但我认为Redux可能是同一回事。尝试使用此Immutable Update Patterns
return {
...state,
myObject: {
...state.myObject,
firstValue: true
}
}