引入Immutable - ninemilli-song/kyou GitHub Wiki

ImmutableJS

why?

模块之间共同使用引用类型的数据,其中一个模块改变数据会对其它使用这个数据的模块产品影响,为了避免这个问题可以使用深拷贝的方式,那么问题来了:

  • 使用自己的深拷贝对于比较深层次的复杂对象性能可能会产生问题
  • 要求每个模块使用数据时都要做一次深拷贝,如果某人在某人在某模块中没有做深拷贝那么就做产生不可预测的问题。

What help?

ImmutableJS Object提供各种API以及不同形式的对象结构(Set\Map etc…),使用它的好处:

  • 使用ImmutableJS API操作数据会返回一个新的对象,不会对原有数据造成影响,所以你可以放心地在自己的模块中随意操作数据,而不必但心影响别人。
  • ImmutableJS 类似于深拷贝,但以不同于深拷贝,它对变更的数据差异进行对比,修改其中不同部分的引用,并以它内部的算法创建新的引用,使数据间的引用各不相同。从而达到互不影响。