我只是在Chrome版本50的Immutable.js docs控制台下测试以下代码,但它会发出错误消息: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);
它运作正常。但为什么? fromJS
和Map
之间的区别是什么?
答案 0 :(得分:3)
Map
,List
和其他方法深度将给定的数据结构转换为不可变的。在这种情况下,嵌套对象b
仍然是不可变映射map1
中的纯JavaScript对象。这是一个map1
的控制台转储来描述相同的...
这就是为什么你应该更喜欢fromJS
,deeply converts the data structure into immutables。这是从map1
电话中产生的fromJS
转储 -
请注意,b
现在与Lt
属于同一类型(地图缩写为map1
)。
还有另一种方法可以进行深度转换 -
var map1 = Immutable.Map().merge({
a: 1,
b: {
c: 1
}
});
答案 1 :(得分:0)
也许是.Map中的设置路径已经被使用,但它不在.fromJs
尝试更改设置路径。