一、immutable简介

immutable即不可变的,immutable对象创建完之后不能被修改,对immutable对象的任何操作(属性或方法的增删改等)都会返回一个新的immutable对象。

immutable原理如下图动画所示:

当对象的属性树中的某个属性节点发生变化时,返回的新对象与原对象共用除[发生变化的属性和他的父节点]之外的其他属性节点。

immutable详细介绍见:https://www.w3ctech.com/topic/1595

二、Immutable API

  • fromJs

    将普通JS对象和数组转为Immutable的Map和List。(Deeply)

注:使用Js对象构造Immutable Map时,Js对象的属性总是字符串的。
  • is

    判断两个对象是否有相同的值。

  • hash

    返回31位整数值,此方法用来决定两个值是否相同以及如何存储这些值。

  • isImmutable

    判断对象是否是immutable的。

  • isCollection

    判断对象是否是集合(collection)或集合的子类(Map、List、Set等)。

三、List API

let List = Immutable.List;
  • toJS

    将List转为JS对象。

  • List

    用传递的参数创建一个新的List。

  • isList

    判断参数是否是List。

  • of

    用传递的参数创建一个新的List。

  • size

  • set

    按索引给List设置值,索引为负数时为从后往前数。

  • delete

    按索引删除元素,索引为负数时为从后往前数。

  • insert

    在指定的位置上插入元素。

  • clear

    清空List。

  • push

  • pop

  • shift

    返回删除List的第一个元素的新List。

  • unshift

    返回在List头部插入一个新元素的新List。

  • update

    返回更新了指定索引上元素值的新List,第二个参数(可选)表示当此索引上的元素没有被设置值时的默认值。

  • setIn

    按keyPath设置值

  • deleteIn

    按keyPath删除元素

  • concat

  • map

  • filter

  • filterNot

  • merge

  • firstlast

  • indexOflastIndexOf

  • findIndexfindLastIndex

  • minmax

四、Map API

let Map = Immutable.Map;
  • toJS

    将Map对象转为JS对象。

  • Map

    创建一个新的immutable Map对象。

  • isMap

  • size

  • set

    返回新增/修改了属性为key值为value的新Map。

  • delete

    返回删除了key的新Map。

  • clear

    清空Map。

  • update

    类似List的update。

  • setIn

  • updateIn

    功能与setIn类似,只是可以通过updater函数更新值。

  • deleteIn

  • merge

  • mergeDeep

  • mergeWith

  • map

  • filter

  • get

  • has

  • getIn

  • hasIn

附: