Immutable.js

  • 在redux中,全局state必须是immutable的,这是使用immutable来优化redux的核心
  • Note:fromJS() 和 toJS() 是深层的互转immutable对象和原生对象,性能开销大,在非未知数据结构的情况下,少用。

常用API介绍

// Map(): 原生object转Map对象 (只会转换第一层,注意和fromJS区别)
immutable.Map({ name: 'graceji', age: 18 });

// List(): 原生array转List对象 (只会转换第一层,注意和fromJS区别)
immutable.List([1, 2, 3, 4, 5]);

// fromJS(): 原生js转immutable对象  (深度转换,会将内部嵌套的对象和数组全部转成immutable)
immutable.fromJS([1, 2, 3, 4, 5]);    // 原生array  --> List
immutable.fromJS({ name: 'graceji', age: 18 });   // 原生object  --> Map

// toJS(): immutable对象转原生js  (深度转换,会将内部嵌套的Map和List全部转换成原生js)
immutableData.toJS();

// 查看List或者map大小  
immutableData.size  或者 immutableData.count()

// is(): 判断两个immutable对象是否相等
const objA = { name: 'graceji', age: 18 };
const objB = { name: 'graceji', age: 18 };
const imA = immutable.Map({ name: 'graceji', age: 18 });
const imB =immutable.Map({ name: 'graceji', age: 18 });
objsA === objB // false; 比较的是地址
immutable.is(imA, imB); // true; hashcode相同

// merge()  对象合并
const imA = immutable.fromJS({ a: 1,b: 2 });
const imA = immutable.fromJS({ c: 3 });
const imC = imA.merge(imB);
console.log(imC.toJS())  // { a: 1,b: 2,c: 3 }

// 增删改查(所有操作都会返回新的值,不会修改原来值)
const immutableData = immutable.fromJS({
    a: 1,
    b: 2,
    c: {
        d: 3
    }
});
const data1 = immutableData.get('a') //  data1 = 1  
const data2 = immutableData.getIn(['c', 'd']) // data2 = 3; getIn用于深层结构访问
const data3 = immutableData.set('a' , 2);   // data3中的 a = 2
const data4 = immutableData.setIn(['c',  'd'],  4);   // data4中的 d = 4
const data5 = immutableData.update('a' , function(x) { return x+4 })   // data5中的 a = 5
const data6 = immutableData.updateIn(['c', 'd'], function(x) { return x+4 })   // data6中的 d = 7
const data7 = immutableData.delete('a')   // data7中的 a 不存在
const data8 = immutableData.deleteIn(['c',  'd'])   // data8中的 d 不存在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值