1.Immutable.js是什么
Immutable.js能将对象转化为不可变的对象,常用于深拷贝,每次修改一个Immutable对象时都会创建一个新的不可变的对象,在新对象上操作并不会影响到原对象的数据。
2.为什么要使用Immutable.js
由于旧有的深拷贝方法都多多少少有着一些缺陷,比如[...obj]和Object.assign()只是一级属性复制, 比浅拷贝多拷贝了一层而已,当使用这两种方法去实现深拷贝的时候,我们不得不去遍历层级,一旦遇到层级较为复杂的对象就十分棘手。而JSON.parse(JSON.stringify(obj))实现的深拷贝,无法处理有undefined存在的情况,因此,Immutable.js就出现了。
3.Immutable.js是怎么实现的
Immutable.js实现的原理是持久化数据结构,当我们使用旧数据创建新数据的时候,要保证旧数据同时可用且不变。同时为了避免在深复制的过程中将所有节点都复制一遍带来性能损耗,Immutable.js采用了结构共享,当一个节点发生变化时,他和他的父节点将会改变,使用新的来替换,但是其他节点则进行共享。
4.Immutable.js引入的方法
npm i immutable下载
import {Map} from' immutable使用Map类型
Immutable常用的类型(Map、List)
Map
var oldImmuobj = Map( obj )
使用set修改
var newImmuobj = oldImmuobj . set ( " name", "xiaoming" )
使用get访问
newImmuobj . get ( " name" )
List
import {List} from' immutable
var arr = List([1,2,3])
可以使用JS操作数组的方法操作,获取的时候直接arr.toJS()就可以了。
5.为何React要尽量避免修改原数据
这是因为React提倡不可变性,就像是React中通过setState()修改数据,也是通过创建一个副本来代替原来的state,这样来更新数据的效率要比在原数据上进行修改要高的多。