卡在 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);
一切正常。但为什么? fromJS
和 Map
有什么区别?
可能是.Map中设置的路径已经被使用了,但是.fromJs中没有
尝试更改设置的路径。
Map
、List
和其他方法不会深度 将给定的数据结构转换为不可变的。在这种情况下,嵌套对象 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
}
});
我刚刚在 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);
一切正常。但为什么? fromJS
和 Map
有什么区别?
可能是.Map中设置的路径已经被使用了,但是.fromJs中没有
尝试更改设置的路径。
Map
、List
和其他方法不会深度 将给定的数据结构转换为不可变的。在这种情况下,嵌套对象 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
}
});