发生这种情况的原因是密钥'selector'
具有非映射值。如果我们确保为'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>
所以,如果我有,我想修改我不得不递归手动映射嵌套的每一层嵌套很深的对象?这看起来有点麻烦,tbh。 – hally9k
这是为了说明。您可以使用['fromJS()'](https://facebook.github.io/immutable-js/docs/#/fromJS)将JavaScript对象和数组深度转换为地图和列表。 – 1983