码迷,mamicode.com
首页 > 其他好文 > 详细

React 不可变数据Immutable

时间:2019-09-01 01:13:09      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:collect   ati   lis   array   取数   mutable   lang   组件   复制   

 

1, 为什么要用到不可变数据 ?

因为,从React渲染组件性能考虑,使用旧数据创建新数据时,要保证旧数据同时可用且不变。

如果是简单的赋值给一个新的变量,新的对象和旧的对象只是名称不同,实际上占用了同样的内存地址仅仅名称不同

这对react响应重新渲染造成了性能影响,或不能及时更新dom。

2, 但是深拷贝,会占用大量的内存和cpu特别是在复杂结构中,如何处理 ?

引入 Immutable.js 不可变数据插件,使用了结构共享,如果对象中只有一个节点发生变化,只修改这一个节点和受它影响的节点,

其他节点共享。

是Facebook工程师 Lee Byron3年时间打造,实现来一套持久化数据结构,

如:Collection  List  Map  Set  Record等,获取数据和普通对象不同

如:map.get(‘key‘) 获取对象值

如:array.get(0) 相当于 array[0]

3, 示例

import { Map }  from ‘immutable‘;

let a = Map({

  select: ‘users‘,

  filter: Map({ name: ‘Kim‘ })

})

let b = a.set(‘select‘, ‘people‘);

 

a === b // false

a.get(‘filter‘) === b.get(‘filter‘);  // true .

 

或者使用es6 结构赋值

obj1 = { ...obj1 , a:2 }  // 表示 深复制,注意,旧对象必须写在前面。
obj1 = { ...obj1 }        // 表示 浅复制
 

 

4, 疑问

为啥不用JSON.stringify()  JSON.parse()  构建新的对象呢,何必耗费精力够一个 Immutable.js  感觉对react性能提升有点劳动大于回报,不理解。。

 

React 不可变数据Immutable

标签:collect   ati   lis   array   取数   mutable   lang   组件   复制   

原文地址:https://www.cnblogs.com/the-last/p/11441147.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!