鍍金池/ 問答/HTML/ react數(shù)組內(nèi)取出的對(duì)象發(fā)生變化,會(huì)影響原數(shù)組

react數(shù)組內(nèi)取出的對(duì)象發(fā)生變化,會(huì)影響原數(shù)組

定義一個(gè)數(shù)組

this.state = {
    list: [],
    obj: {}
}
const list = [
    {id: 1},
    {id: 2}
]
this.setState({
    list
})

取出一個(gè)對(duì)象

const obj = list[0]
this.setState({
    obj
})

修改對(duì)象,修改值,然后setState

obj.id = 3
this.setState({
    obj
})

問題來了,請(qǐng)問原因?

  • 像這樣修改,list中obj值也會(huì)發(fā)生變化,會(huì)成這樣
[
    {id: 3},
    {id: 2}
]
  • 即使把obj和list切斷,如下操作,修改obj,list的值依然會(huì)變化
const list1 = [].concat(list)
const obj = list1[0]
// 然后修改obj,list中obj的值依然會(huì)變
回答
編輯回答
別硬撐

js對(duì)象的引用了解一下

2018年8月1日 23:47
編輯回答
愛礙唉

這個(gè)不是react的鍋,js本來就是這樣,對(duì)象是引用類型
可以這么做

// 第一種方式
const obj ={...list[0]}
// 第二種方式
const obj =Object.assign({},list[0])

obj.id = 3
this.setState({
    obj
})

或者immutable了解一下

2017年11月28日 10:55