为什么 Immutable.js 在 Map.setIn() 上抛出无效的键路径
Why does Immutable.js throw Invalid key path on Map.setIn()
我一定是漏掉了什么,因为 Docs make it out as if the below code should work just fine but I get an invalid keypath error... Check this codepen.
var map1 = Immutable.Map({ 'selector': { 'type': 'bar' }});
var map2 = map1.setIn(['selector', 'type'], 'foo');
console.log(map2.toJS());
发生这种情况是因为键 'selector'
具有非 Map 值。
如果我们确保 'selector'
的值也是一个不可变映射,setIn
将起作用:
var map1 = Immutable.Map({ 'selector': Immutable.Map({ 'type': 'bar' })});
var map2 = map1.setIn(['selector', 'type'], 'foo');
console.log(map1.toJS());
console.log(map2.toJS());
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>
要将 JavaScript 对象和数组深度转换为映射和列表,您可以使用 fromJS()
。所以你可以更轻松地写:
var map3 = Immutable.fromJS({ 'selector': { 'type': 'bar' }});
var map4 = map3.setIn(['selector', 'type'], 'foo');
console.log(map3.toJS());
console.log(map4.toJS());
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>
我一定是漏掉了什么,因为 Docs make it out as if the below code should work just fine but I get an invalid keypath error... Check this codepen.
var map1 = Immutable.Map({ 'selector': { 'type': 'bar' }});
var map2 = map1.setIn(['selector', 'type'], 'foo');
console.log(map2.toJS());
发生这种情况是因为键 'selector'
具有非 Map 值。
如果我们确保 'selector'
的值也是一个不可变映射,setIn
将起作用:
var map1 = Immutable.Map({ 'selector': Immutable.Map({ 'type': 'bar' })});
var map2 = map1.setIn(['selector', 'type'], 'foo');
console.log(map1.toJS());
console.log(map2.toJS());
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>
要将 JavaScript 对象和数组深度转换为映射和列表,您可以使用 fromJS()
。所以你可以更轻松地写:
var map3 = Immutable.fromJS({ 'selector': { 'type': 'bar' }});
var map4 = map3.setIn(['selector', 'type'], 'foo');
console.log(map3.toJS());
console.log(map4.toJS());
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>