1.immutable为什么要用?
利用这个库来实现数据的表现方式,加强数据的不可变性
JavaScript 中的对象一般是可变的(Mutable),因为使用了引用赋值,新的对象简单的引用了原始对象,改变新的对象将影响到原始对象。如
foo={a: 1};
bar=foo;
bar.a=2
console.log( foo.a )//2
虽然这样做可以节约内存,但当应用复杂后,这就造成了非常大的隐患,简单的说当数据结构复杂,数量多时,使用immutable,当数据较少的时候,**一般的做法是使用下面几种方法实现 **
1.1es6-Object.assign()方法
深复制只有一层,之后为浅复制(除非嵌套)
var obj = {a:1}
var obj1 = {b:2}
var obj2 =Object.assign(obj,obj1)
console.log(obj2)//{a: 1, b: 2}
1.2使用ES7中的扩展运算符
var obj = {a:1}
var obj1 = {b:2}
var obj2=Object.assign(obj,obj1)
//...尽量使用这样的赋值形式
obj={...obj,a:2}
console.log(obj)//{a: 2, b: 2}
console.log(obj2)//{a: 1, b: 2}
var obj = {a:1}
var obj1 = {b:2}
var obj2=Object.assign(obj,obj1)
//避免使用,这种方法赋值
obj.a=2
console.log(obj)//{a: 2, b: 2}
console.log(obj2)//{a: 2, b: 2}
1.3JQuery的extend
let newObj = $.extend(true,{},partcontent);
2.什么是 Immutable Data
Immutable库是Facebook公司的一个开源软件库。我们使用redux-immutable模块将这个库整合进我们的程序,这样我们就能以Immutable库提供的数据类型来存储程序状态(app state)了。
Immutable Data 就是一旦创建,就不能再被更改的数据。不可变数据是[面向功能编程的核心概念,这种概念在JavaScript中的应用已渐占优势。使用React框架和Redux库时,不可变数据能帮助巩固这两者的核心原则:如果程序状态(app state)没有发生改变,那网页的文档对象模型(DOM)也不用改变。
Immutable 实现的原理是 Persistent Data Structure(持久化数据结构),也就是使用旧数据创建新数据时,要保证旧数据同时可用且不变。同时为了避免 deepCopy 把所有节点都复制一遍带来的性能损耗,Immutable 使用了 Structural Sharing(结构共享),即如果对象树中一个节点发生变化,只修改这个节点和受它影响的父节点,其它节点则进行共享。
网友评论