动态不可变地图更新

时间:2017-01-31 14:54:59

标签: javascript immutable.js

我正在使用Immutable,我发现当你想要更新不可变数据单元中的多个键时会出现很多问题。

现在我正在执行此操作以实现更新的对象。

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"
    })

有可能吗?或者还有其他方法可以做到这一点吗?

我认为它会导致很大的内存问题,因为每个setIn都会创建一个新的Immutable Map。我读过withMutations,但我不明白它是如何使用的。

感谢您的帮助!

0 个答案:

没有答案