3 回答
TA貢獻1804條經驗 獲得超2個贊
為了setState對于嵌套對象,您可以遵循以下方法,因為我認為setState不處理嵌套更新。
var?someProperty?=?{...this.state.someProperty}someProperty.flag?=?true;this.setState({someProperty})其思想是創建一個虛擬對象,對其執行操作,然后用更新的對象替換組件的狀態
現在,擴展操作符只創建對象的一個級別嵌套副本。如果您的狀態是高度嵌套的,例如:
this.state?=?{
???someProperty:?{
??????someOtherProperty:?{
??????????anotherProperty:?{
?????????????flag:?true
??????????}
??????????..
??????}
??????...
???}
???...}您可以在每個級別上使用擴展運算符設置State,如
this.setState(prevState?=>?({
????...prevState,
????someProperty:?{
????????...prevState.someProperty,
????????someOtherProperty:?{
????????????...prevState.someProperty.someOtherProperty,?
????????????anotherProperty:?{
???????????????...prevState.someProperty.someOtherProperty.anotherProperty,
???????????????flag:?false
????????????}
????????}
????}}))然而,隨著狀態越來越嵌套,上面的語法變得每況愈下,因此我建議您使用immutability-helper包來更新狀態。
TA貢獻2003條經驗 獲得超2個贊
this.setState({ someProperty: { ...this.state.someProperty, flag: false} });TA貢獻1878條經驗 獲得超4個贊
有時直接回答并不是最好的:)
簡短版本:
this.state = {
someProperty: {
flag: true
}}this.state = {
somePropertyFlag: true}長版:
{
parent: {
child1: 'value 1',
child2: 'value 2',
...
child100: 'value 100'
}}child1parent
parent
shouldComponentUpdate()
添加回答
舉報
