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' }}
child1
parent
parent
shouldComponentUpdate()
添加回答
舉報