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()
添加回答
举报
