为了账号安全,请及时绑定邮箱和手机立即绑定

list赋值

拷贝list,为何要展开后再赋值,直接=this.state.list不可以吗?

正在回答

7 回答

如果从正确性上来说,用push是不对的,state状态强调的是immutable,所以建议一定要拷贝一个副本来操作。这是偏底层的东西了

1 回复 有任何疑惑可以回复我~
#1

qiaoyang

const list = [...this.state.list]展开赋值与直接const list = this.state.list赋值效果上并没有区别,老师的意思是后面这种赋值不算拷贝副本么?
2018-08-14 回复 有任何疑惑可以回复我~
#2

慕莱坞5310431 回复 qiaoyang

const list = this.state.list这种肯定不是拷贝了,引用类型直接赋值只是多了一个引用,指向的还是同一个内存,扩展运算符会新开一个内存
2018-08-21 回复 有任何疑惑可以回复我~
#3

qiaoyang 回复 慕莱坞5310431

明白了,谢谢
2018-08-22 回复 有任何疑惑可以回复我~

还是没懂耶,直接操作原有state状态为什么会有性能问题呢,相比之下拷贝一个副本还要多开辟一个空间呢

0 回复 有任何疑惑可以回复我~

不要说些黑话,哈哈

0 回复 有任何疑惑可以回复我~

为什么React这么麻烦。。

1 回复 有任何疑惑可以回复我~

要新增一个数据,实现的方式很多,展开是一种方式,直接使用push方法也是一样的

0 回复 有任何疑惑可以回复我~
#1

HoSalt

是为了获得一个新的对象,用slice,concat等可以达到相同的效果,展开只是一种方式
2018-07-19 回复 有任何疑惑可以回复我~

js深浅拷贝的问题。

比如:

let obj1 = {
  age: 1
};
let obj2 = obj1;
obj2.age = 2;
console.log(obj1.age); // 2
1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信