React中setState修改深层对象
在React中经常会使用到setState,因为在react生态中,state就是一切.在开发过程中,时长会在state中遇到一些比较复杂的数据结构,类似下面这样的:
state = {
list: {
objA: {
name: 'A',
age: 20
},
objB: {
name: 'B',
age: 25
},
objC: {
show: false
},
objD: 'D'
}
}
这时需要我们修改list
中objA
中的name
属性和objD
的属性,遇到这样的情况我们一般会使用什么办法解决呢?其实有三种解决方案:
方案一(作用于对象中的深层级和第一层级):
this.setState({
list: {
...this.state.list,
objA: {
...this.state.list.objA,
name: 'A1'
}
}
})
方案二(作用对象中的第一层级):
let data = Object.assign({}, this.state.list, {objD: 'D1'})
this.setState({
list: data
})
方案三(作用于对象中的深层级和第一层级):
let data = this.state.list;
data.objA.name = 'A1';
data.objD = 'D1';
this.setState({
list: data
})
总结:
| 方案 | 适用范围 | 缺点
| :-: | :-: | :-: |
| 方案一 |多层级和单一层级都存在 | 写法麻烦,单次对象赋值,对象层级多的时候,容易遗漏
| 方案二 |只适用与第一层级 | 只适用第一层级
| 方案三 |多层级和单一层级都存在 | 若存在深层及和单一层级的,需要多次赋值
这三种写法都可以,使用哪一种方案,还需要根据业务来定.希望看了之后,能给大家带来一些帮助,谢谢.

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
python 赋值语句
python中的语句: 赋值语句 if语句,当条件成立时运行语句块。经常与else, elif(相当于else if)配合使用。 for语句,遍列列表、字符串、字典、集合等迭代器,依次处理迭代器中的每个元素。 while语句,当条件为真时,循环运行语句块。 try语句。与except, finally, else配合使用处理在程序运行中出现的异常情况。 class语句。用于定义类型。 def语句。用于定义函数和类型的方法。 pass语句。表示此行为空,不运行任何操作。 assert语句。用于程序调适阶段时测试运行条件是否满足。 with语句。Python2.6以后定义的语法,在一个场景中运行语句块。比如,运行语句块前加锁,然后在语句块运行退出后释放锁。 yield语句。在迭代器函数内使用,用于返回一个元素。 raise语句。抛出一个异常。 import语句。导入一个模块或包。常用写法:from module import name, import module as name, from module import name as anothername 特别说明,以上划分也不是很严格...
-
下一篇
java中为什么重写equals时必须重写hashCode方法?
在上一篇博文Java中equals和==的区别中介绍了Object类的equals方法,并且也介绍了我们可在重写equals方法,本章我们来说一下为什么重写equals方法的时候也要重写hashCode方法。 先让我们来看看Object类源码 /** * Returns a hash code value for the object. This method is * supported for the benefit of hash tables such as those provided by * {@link java.util.HashMap}. * <p> * The general contract of {@code hashCode} is: * <ul> * <li>Whenever it is invoked on the same object more than once during * an execution of a Java application, the {@code hashCode} method * m...
相关文章
文章评论
共有0条评论来说两句吧...