理解数据不可变性

93 阅读1分钟
一. 什么是数据不可变性

数据不可变性,主要针对的是引用类型的数据,eg:对象、数组...

let obj1 = { name : "翔哥", age : 19, } obj1.name = "轩哥"

如上述的代码,把对象 obj1 的 name 属性的值改为了 "轩哥" ,但是对象 obj1 的值发生了突变!!!

如果,我们采用数据不可变的思想,应该如下:

let obj2 = Object.assign({} , obj1 , { name : "轩哥"})

此时,对象 obj1 的值并没发生改变,我们是通过 Object.assign({} , oldObj) 方法新建了一个对象 obj2 !!

如果是数组,就用 [ ].concat(oldArray)

二. 与 React.js 的关系

判断状态是否发生改变的diff算法:

React.js 组件有状态的概念。这就是使更新如此容易的原因 --- 当状态发生改变时,组件就重新渲染。但是,检查状态是否发生改变时,如果我们的状态很复杂,是嵌套对象时,就需要进行深度相等性检查,因为如果对于数据处理采用的是数据突变性的话,就无法仅仅通过状态的引用值是否相等来判断状态是否改变,因为我们并没有改变状态对象的引用值,仅仅是在状态对象内部进行的修改!!!

三. 数据不可变性的优缺点

优点:

  • 提高组件的性能

1820.png

  • 使某些功能更容易

     - 因为使用数据不可变,可以非常容易地获得数据的之前版本,这使实现更改历史记录或者撤销/重做等功能时非常方便!!!
    

缺点:

  • 需要依赖专门的库才会使它更好地工作

  • 与小数据集的可变方法比较,性能较低

         - 比较消耗内存