React 不可变数据Immutable
Posted the-last
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了React 不可变数据Immutable相关的知识,希望对你有一定的参考价值。
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的主要内容,如果未能解决你的问题,请参考以下文章