原始值是指相等类型的值。在中间,原始值由值传递,引号类型是通过引用传递的,这意味着,如果函数接收原始值作为参数,则形式参数和solid参数there the is n is ewne Is IS之间的参考关系,它们是完全独立的。在中间,不可能在原始值上提供代理,因此,如果要将原始值转换为响应数据,则必须在原始值上制作一层包裹你想做什么。
根据上述内容,如果要将响应数据实现到原始值,则必须将非原始值对象使用到“包”原始值,例如:
创建包裹对象的工作似乎并不是一个问题,但实际上存在一个问题:
//使用ref const name = ref('Hello vue3')
效果(()=> {//在副作用函数中,通过副作用中的值属性读取原始值console.log(name.value)})
//修改名称的值。值和触发效果副作用函数以重新执行nam.value ='Hello world'
因此,您需要优化功能,如下所示:
通过该方法,为软件包对象设置非成分,非编写属性和值。它用于表示代表对象而不是原始值的响应数据对象。
在编写vue.js组件时,通常需要将数据公布到模板中,例如:
您可以看到此处使用的操作符号(...)将响应数据暴露于外部,然后将丢失响应。以下两个代码等效:
如果您这样看,很容易找到失去响应的原因是将普通对象暴露于外部。它没有任何响应功能。
实际上,通过返回类似结构的对象,但是通过实现对象的函数,并返回其中的特定响应数据,可以保证与原始响应数据的连接如下:
第一个版本的功能的缺乏是,它只能由单个处理。如果传输中有许多响应数据键,则效果不高,因此批处理转换是通过包装函数实现的:
该函数解决了响应损失的问题,但它也带来了一个新问题,也就是说,它将将响应数据的第一层转换为值,这意味着必须通过属性访问它。因此,有必要提供自动起飞的能力。
SO -Called自动变量是指属性的访问行为,也就是说,如果属性读取为一个,则直接返回相应的属性值。
基于以前定义的标识,代理对象是通过返回的对象(即通过代理实现目标而创建的),并将上述内容封装到函数中,如下:
实际上,在编写组件时,该函数在组件中返回的数据将传递给处理函数。这就是为什么在直接在模板中访问属性时访问属性时无需访问和设置属性的原因。
在中间,自动支队不仅存在于上述情况之外,而且还具有自动起飞的能力,例如:
角色场景总结如下:
原始:https://juejin.cn/post/7100041806217216007