Javascript 动态不变映射更新
我正在使用Immutable,我发现当您想要更新一个不可变数据单元中的多个键时,会出现很多问题 现在,我正在执行这些操作以实现更新的对象Javascript 动态不变映射更新,javascript,immutable.js,Javascript,Immutable.js,我正在使用Immutable,我发现当您想要更新一个不可变数据单元中的多个键时,会出现很多问题 现在,我正在执行这些操作以实现更新的对象 state.setIn(["user", "email"], action.payload.user.email) .setIn(["user", "pass"], action.payload.user.password) .setIn(["user", "pending"], action.meta.pend
state.setIn(["user", "email"], action.payload.user.email)
.setIn(["user", "pass"], action.payload.user.password)
.setIn(["user", "pending"], action.meta.pending)
.setIn(["user", "username"], action.payload.user.name)
.setIn(["user", "charity"], action.payload.user.charityOrganizationId)
.setIn(["user", "avatar"], action.payload.user.avatarElementIds)
.setIn(["user", "isAuthorized"], action.payload.user.isAuthorized);
它看起来不那么漂亮,我想创建一种方法,让我能够像这样处理它:
dynamicUpdate(immutableData, newDataCollection) {
var res;
for (var key in newDataCollection) {
res = immutableData.setIn(["user", key], newDataCollection[key])
}
return res;
}
var newState = dynamicUpdate(ImmutableState, {
email : "newEmail",
pass : "newPass"
})
可能吗?或者有其他方法可以做到这一点
我认为这会导致很大的内存问题,因为在每个设置中都会创建一个新的不可变映射。我读过关于基因突变的书,但我不明白如何使用它
谢谢你的帮助 只做
state.mergeDeep(fromJS(action.payload.user))
会容易得多。您可以控制有效负载对象的用户密钥,以便使所有密钥匹配,并让mergeDeep
为您处理它。可能还有其他一些解决方案,但我发现这对于这些类型的用例非常有效,并且更容易阅读/键入/理解。非常感谢VanDanic!