为什么Immutable.js在Map.setIn()上抛出无效的键路径 [英] Why does Immutable.js throw Invalid key path on Map.setIn()

查看:86
本文介绍了为什么Immutable.js在Map.setIn()上抛出无效的键路径的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须在这里遗漏一些东西,因为文档使它似乎下面的代码应该工作得很好,但我得到一个无效的keypath错误...检查这个编码器

I must be missing something here because the 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 将起作用:

This happens because the key 'selector' has a non-Map value. setIn will work if we make sure that the value for 'selector' is also an Immutable Map:

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() 。所以你可以更容易地写:

To deeply convert JavaScript Objects and Arrays to Maps and Lists you can use fromJS(). So you can more easily write:

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>

这篇关于为什么Immutable.js在Map.setIn()上抛出无效的键路径的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆