什么是深拷贝,什么是浅拷贝?
假设您要将a复制到b。 也就是说,B=A,b变化的话,a也变化,是浅拷贝。 如果a不变的话,是深刻的副本。 (实际上,深度复制只针对更复杂的对象类型的数据。 此时,只复制object中的引用地址,而不是堆内存中的值。 ) ) ) )。
http://www.Sina.com/http://www.Sina.com /
js轻拷贝与深拷贝的区别及实现方法
1、扩展算子实现深度复制
let obj={a:1,b:2,c : { name : ' world ' } letobj1={ . obj } obj1. a=5; console.log(obj )/) a:1,b: 2,c: ) name : ' world ' } console.log (obj1)/) a:b3360
let obj={a:1,b:2,c : { name : ' world ' } letobj1={ . obj } obj1. c.name=' hello '; console.log(obj )/) a:1,b: 2,c: ) name : ' hello ' } console.log (obj1)/) a:b3360 obj1 obj的c是对象,此时复制的对象是引用数据类型c,实际复制的是对象的引用地址,因此是浅副本
对于实现深拷贝的方式:
在react中,从父组件传递给子组件的数据data在子组件中直接在props中复制到childData,在浅副本中childData=data,此时childData和data
因此,为了避免修改源数据,在子组件中将深度复制(childData=[…props.data] )或在父组件中将深度复制的对象传递到子组件
在react hook中使用到深度复制(let tempBlockData=[…blockData]; 中,重新赋值state值进行操作。 之所以使用深度复制,是为了保留对新数组的操作,以避免更改在useState中定义的state的值。 因此,为了不改变state的blockData,进行深度复制,然后用对应的setState进行更新。