react 解决数据不可变性

  1. 对象的浅拷贝:Object.assign或扩展运算符
    对象的浅拷贝带来的问题:
    从代码角度来讲,没有问题,解决了一些实际开发会出现的风险
    从性能角度来说,有问题,如果对象过于庞大,这种拷贝方式会带来性能问题以及内存浪费
  2. Immutable对象
    Immutable对象的特点是:只要修改了对象就会返回一个新的对象,但是旧的对象不会改变。
    为了节约内存,Immutable使用了一种新的算法:Persistent Data Structure(持久化数据结构/一致性数据结构)
    这里的持久化数据结构使用一种数据结构来存储数据;当数据被修改时,会返回一个对象,但新的对象会尽可能利用之前的数据结构而不会对内存造成浪费。
    要做到这一点,需要利用结构共享,新的对象会尽可能利用原来的数据与结构。
    官网连接:https://immutable-js.com/
// 使用
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/4.0.0-rc.14/immutable.min.js"></script>
<script>
    const im = Immutable
    
    // 对象的使用
    const info = {
    
    
      name: 'lizhi',
      age: 20,
      friend: {
    
    
        name: 'oneone',
        age: 20
      }
    }
    
    const infoIM = im.Map(info)
    const obj = infoIM
    const InfoIM2 = infoIM.set('name', 'why')
    console.log(obj.get('name'))		//lizhi
    console.log(InfoIM2.get('name'))	//why

    const infoIM3 = im.fromJS(info)
    console.log(infoIM3)	//t {size: 3, _root: Ce, __ownerID: undefined, __hash: undefined, __altered: false}

    // list的使用
    const name = ['lizhi', 'oneone', 'liang']
    const nameIM = im.List(name)
    const arrIM = nameIM.set(0,'litchi')
    console.log(nameIM.get(0))		//lizhi
    console.log(arrIM.get(0))		//litchi
</script>

猜你喜欢

转载自blog.csdn.net/ladream/article/details/120028538