1, 爲何要用到不可變數據 ?react
從React渲染組件性能考慮,使用舊數據建立新數據時,要保證舊數據同時可用,es6
而且沒有變化的部分還可用,目的是儘可能減小沒必要要的渲染和重繪。數據結構
若是是簡單的賦值給一個新的變量,新舊對象只是名稱不一樣,對比不出具體的值變化。其次,也會帶來引入對象淺拷貝的問題,形成不可預測的展現值。dom
這對react響應從新渲染形成了性能影響,或不能及時更新dom。性能
2, 可是深拷貝,會佔用大量的內存和cpu特別是在複雜結構中,如何處理 ?spa
引入 Immutable.js 不可變數據插件,使用告終構共享,若是對象中只有一個節點發生變化,只修改這一個節點和受它影響的節點,插件
其餘節點共享。code
是Facebook工程師 Lee Byron3年時間打造,實現來一套持久化數據結構,對象
如:Collection List Map Set Record等,獲取數據和普通對象不一樣token
如: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性能提高有點勞動大於回報,不理解。。