1.什么是setup:
1.它是Vue3.0中一个新的配置项,值是一个函数。
2.它是所有Composition API 的“表演舞台”。
3.组件中用到的:数据,方法等均要配置在setuo中
4.setup函数的两种返回值:
1.返回一个对象,对象中的方法与属性可以直接在模板中使用
2.返回一个渲染函数:可以自定义渲染内热(了解)
2.ref函数:
1.作用:定义一个响应式的数据
2.语法:const xxx = ref(initValue)
3.接收的数据可以是:基本类型,也可以是对象类型。
基本类型数据:响应式依然是靠object.defineProperty()的get与set完成的
对象类型的数据:内部需要 “求助” 了Vue3.0中的一个新函数————reactive函数
3.reactive函数:
1.作用:定义一个对象类型的响应式的数据 (基本类别数据用ref函数)
2.语法:const 代理对象 = ref(被代理对象) 接受一个对象或数组,返回一个代理对象 proxy
3.reactive函数定义的响应式数据是 “深层次的”
4.内部基于ES6的Proxy实现的,通过代理对象操作对象内的数据都是响应式的
4.ref对比reactive:
1.从定义数据角度:
ref用来定义:基本数据类型
reactive用来定义:对象或者数组 类型数据
ref也可以用来定义对象或者数组类型数据但是它内部还是通过请求reactive的帮助来实现
2.从原理角度对比:
ref通过object.defineProperty()的get与set来实现的响应式(数据劫持)
reactive通过使用Proxy来实现响应式(数据劫持),通过RefIect操作源对象内部数据
3.从使用角度对比:
ref定义数据:操作数据需要.value,读取数据时模板中直接读取不需要value
reactive定义的数据:操作数据与读取数据都不需要.value
5.Vue3.0的响应式原理:
vue2.0响应式存在的问题:新增属性,删除属性,界面不会更新 直接通过下标修改数组,界面不会自动更新
实现原理:
通过Proxy(代理):拦截对象人员属性的变化包括:属性值的读写,属性的添加,属性的删除等
通过RefIect(反射): 对被代理的属性对象进行操作
new Proxy(data,{
//拦截读取属性值
get (target,prop){
return Reflect.get(target,prop)
},
//拦截设置属性值或者添加新的属性
set (target,prop,value) {
return Reflect,set(target,prop,value)
},
//拦截删除属性
defineProperty (target,prop) {
return Reflect.defineProperty(target,prop)
}
})