解构本身其实是一个深拷贝
let obj = { name9: "houguoyu" }
let { name9 } = obj
obj.name9 = "xuangou"
console.log("name9", name9); //name9 houguoyu
如果对某个值进行监听,那么解构之后响应性就会消失,vue的reactive解构之后响应性好像也会消失
let origin = { name: "黄烽", age: 10 }
let p = new Proxy(origin, {})
// 看一个结构失去响应性的问题
let { name, age } = p
console.log(name, age); //黄烽 10
origin.name = "andy"
console.log(name, age);//黄烽 10
要保持响应性的第一种方式就是放弃使用解构
let origin1 = { name: "黄烽", age: 10 }
let p1 = new Proxy(origin1, {})
console.log(p1.name); //黄烽
origin1.name = "simon"
console.log(p1.name);//simon
又或者可以借鉴一下vue当中ref的类似写法
let o1 = { value: "huangfeng" }
let p3 = new Proxy(o1, {})
let o2 = { value: 10 }
let p4 = new Proxy(o2, {})
let p2 = {
name1: o1,
age1: o2
}
let { name1, age1 } = p2
console.log(name1.value, age1.value);//huangfeng 10
p3.value = "wyw"
p4.value = 100000
console.log(name1.value, age1.value);//wyw 100000
这样的话,在函数当中应该能返回一个响应式的对象