Vue3中使用响应式数据
Vue3使用响应式数据需要通过ref与reactive
<template>
{
{
num }}
<button @click="Method1">button</button>
</template>
<script lang="ts">
import {
defineComponent, reactive, ref } from "vue";
export default defineComponent({
name: "App",
setup() {
//如果只是const num = 0;num不是响应式的数据,修改这个数据页面不会发生更改
const num = ref(0);
const person = {
name: 'aaa',
age: 12
}
//reactive将person这个对象当成目标对象,user则是代理对象,
//修改person中的值则需要通过user.name,user.age来响应式修改
const user = reactive(person)
function Method1() {
console.log(num);
//通过num.value修改这个属性的值
num.value ++
}
return {
num,
Method1,
user
};
},
});
</script>
Proxy代理
reactive返回的是一个代理对象,其原理就是Proxy实现
//目标对象
const per = {
name: 'tyh',
age: 12
}
//生成代理对象
const user = new Proxy(per, {
/* get 方法通过Reflect反射,从而能够返回目标对象的属性值 通过user.name就可以访问到per.name */
get(target, prop) {
return Reflect.get(target, prop)
},
/* set方法则可以对目标对象(per)的属性值进行修改或者增加新的属性 */
set(target, prop, val) {
return Reflect.set(target, prop, val)
},
/* deleteProperty方法则删除目标对象上的属性值 */
deleteProperty(target, prop) {
return Reflect.defineProperty(target, prop)
}
})