immutable.js

看到recat项目里用, 查了一下 功能还挺强大.
Immutable.js支持数据类型的实例 能在引用相同对象的同时 再单独存储不同的属性.
这个能力js语言原本是没有的, 又正好符合react的state特点.
所以用来优化reducers正好

demo

这个例子能说明比深拷贝nb在哪

1
2
3
4
5
6
7
8
9
10
var map1 = Immutable.Map({a:1, b:2, c:{"key":"value"}});
var map2 = map1.set('b', 50);
console.log(map1.get('a')); // 1
console.log(map2.get('a')); // 1
console.log(map1.get("c") === map2.get("c")); // true
console.log(map1.get('b')); // 2
console.log(map2.get('b')); // 50

比较实例要用Immutable.is

1
Immutable.is(map1, map2); // false

数据类型

Immutable.js提供了7种不可变的数据类型: List,Map,Stack,OrderedMap,Set,OrderedSet,Record
(OrderedMap和OrderedSet属于锦上添花)
Record在项目里可以用来存state 除了默认值以外 删掉当前值 还能还原到默认值, 还挺实用

1
2
3
4
var ABRecord = Immutable.Record({ a: 1, b: 2 });
var r = new ABRecord({ a: 3 });// { "a": 3, "b": 2 }
var rr = r.remove('a');// { "a": 1, "b": 2 }

http://facebook.github.io/immutable-js/docs/#/