2017-04-22 24 views
0

我做的setState和避免變異現有物業

const user = this.state.user; 
this.setState({ 
    user: { 
    id 
    } 
}); 

,但我的其他性能也沒有了。它曾經有

user.name, user.gender等。我如何保留現有對象的副本並更新狀態?使用lodash的克隆方法?

回答

0

你不需要lodash來做到這一點。嘗試

let updatedUser = Object.assign({}, this.state.user, { 
    id 
}) 

this.setState({ 
    user: updatedUser 
}) 
0

你可以看看Object.assign解決這個問題。

不過,我會建議你使用immutability-helper

import update from 'immutability-helper'; 

const user = this.state.user; 
const updatedUser = update(user, { 
    id: {$set: 7} 
}); 

this.setState({user: updatedUser}); 

這裏,$set是爲update功能設置一個新值user.id的命令。用戶對象中的其他屬性將保持不變。

雖然語法稍微習以爲常,但一旦理解它就容易多了。對於簡單的狀態對象,Object.assign很好。但是,如果您的狀態對象非常複雜且深入,則克隆整個狀態可能會影響性能。這是不變性幫手幫助的地方。