卡在 Immutable.js setIn 方法中

Stuck in Immutable.js setIn method

我刚刚在 Chrome 版本 50 的 Immutable.js 文档控制台下测试了以下代码,但它发出一条错误消息:Uncaught Error: invalid keyPath(…)

var map1 = Immutable.Map({
    a: 1,
    b: {
        c: 1
    }
});

var map2 = map1.setIn(['b', 'c'], 2);

然后我将代码更改为:

var map1 = Immutable.fromJS({
    a: 1,
    b: {
        c: 1
    }
});

var map2 = map1.setIn(['b', 'c'], 2);

一切正常。但为什么? fromJSMap 有什么区别?

可能是.Map中设置的路径已经被使用了,但是.fromJs中没有

尝试更改设置的路径。

MapList 和其他方法不会深度 将给定的数据结构转换为不可变的。在这种情况下,嵌套对象 b 仍然是不可变映射 map1 中的普通 JavaScript 对象。这是 map1 的控制台转储来描述相同的...

这就是为什么您应该更喜欢 fromJS,而 deeply converts the data structure into immutables。这是从 fromJS 调用中产生的 map1 的转储 -

请注意 b 现在与 map1.

属于同一类型(地图缩小为 Lt

还有另一种深度转换的方法-

var map1 = Immutable.Map().merge({
    a: 1,
    b: {
        c: 1
    }
});

注意 merge internally invokes fromJS only :).