3 回答

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個(gè)贊
為了setState
對于嵌套對象,您可以遵循以下方法,因?yàn)槲艺J(rèn)為setState不處理嵌套更新。
var?someProperty?=?{...this.state.someProperty}someProperty.flag?=?true;this.setState({someProperty})
其思想是創(chuàng)建一個(gè)虛擬對象,對其執(zhí)行操作,然后用更新的對象替換組件的狀態(tài)
現(xiàn)在,擴(kuò)展操作符只創(chuàng)建對象的一個(gè)級別嵌套副本。如果您的狀態(tài)是高度嵌套的,例如:
this.state?=?{ ???someProperty:?{ ??????someOtherProperty:?{ ??????????anotherProperty:?{ ?????????????flag:?true ??????????} ??????????.. ??????} ??????... ???} ???...}
您可以在每個(gè)級別上使用擴(kuò)展運(yùn)算符設(shè)置State,如
this.setState(prevState?=>?({ ????...prevState, ????someProperty:?{ ????????...prevState.someProperty, ????????someOtherProperty:?{ ????????????...prevState.someProperty.someOtherProperty,? ????????????anotherProperty:?{ ???????????????...prevState.someProperty.someOtherProperty.anotherProperty, ???????????????flag:?false ????????????} ????????} ????}}))
然而,隨著狀態(tài)越來越嵌套,上面的語法變得每況愈下,因此我建議您使用immutability-helper
包來更新狀態(tài)。

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊
this.setState({ someProperty: { ...this.state.someProperty, flag: false} });

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊
有時(shí)直接回答并不是最好的:)
簡短版本:
this.state = { someProperty: { flag: true }}
this.state = { somePropertyFlag: true}
長版:
{ parent: { child1: 'value 1', child2: 'value 2', ... child100: 'value 100' }}
child1
parent
parent
shouldComponentUpdate()
添加回答
舉報(bào)