的對象屬性我已經瞭解到,爲了修改位於狀態的屬性或子對象,不能直接在setState中設置它。相反,我需要在我的函數中創建一個對象的副本,並首先在那裏修改它。我接着做返航使用的setState整個變化的對象,如下圖所示:修改位於狀態
constructor(props) {
super(props)
this.state = {
item: this.props.item,
success: false
}
}
和:
handleChange(event){
let item = this.state.item;
const target = event.target;
let value = target.type === 'checkbox' ? target.checked : target.value;
const id = target.id;
item[id] = value;
this.setState({
item: item,
success: true
})
}
有一件事我不知道,但是,是對象是通過引用複製。這意味着行item[id] = value
自動更新狀態。從setState函數中刪除item: item
行會有什麼傷害,如下所示?
this.setState({
success: true
})
問題1:它的工作方式很好,但是有沒有這樣做的副作用?
問題2:另一方面,保持原始setState的方式是否有任何危害?由於item
已經在狀態中更新,因此再次更新它似乎不會有任何傷害。
問題3:會更有意義,使對象的完整副本,而不是第一個,因此避免這一整個問題,如下列:
let item = JSON.parse(JSON.stringify(this.state.item));