2 回答

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊
ES6中的Object.assgin()是實(shí)現(xiàn)淺拷貝的。JS深拷貝與淺拷貝,與React沒(méi)關(guān)系的。
我們也在做React項(xiàng)目,給出兩種解決方案吧
1、按樓主的想法,實(shí)現(xiàn)Object深拷貝:
JSON.parse(JSON.stringify(oldObj));
//簡(jiǎn)單粗暴沒(méi)有之一,注意這個(gè)方法會(huì)忽略掉為undefined
的屬性,不過(guò)數(shù)據(jù)庫(kù)一般存的是null
而非undefined
(后臺(tái)一般是不會(huì)幫你把null
轉(zhuǎn)成undefined
的,吃力不討好~),所以也可能忽略這個(gè)缺點(diǎn)
2、完全沒(méi)必要調(diào)用復(fù)制data,直接調(diào)用setState
,React
會(huì)幫你處理復(fù)制的^_^
this.setState({ listData: data })
//然后在任意方法中console.log(this.state.listData)
結(jié)束~!

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊
可以嘗試一下immutable.js
不管怎樣,深拷貝總會(huì)帶來(lái)性能問(wèn)題,
可以從別的角度來(lái)解決這個(gè)問(wèn)題,比如精簡(jiǎn)數(shù)據(jù)結(jié)構(gòu)
以前只有一個(gè)state
,現(xiàn)在拆分為多個(gè),每次setState
只更新其中某一項(xiàng)就行了
添加回答
舉報(bào)