ref
Ref作用:定义一个响应式的数据。
Ref语法:
-
创建一个包含响应式数据的引用对象
-
JS中操作数据,使用XXX.value。
-
模板中使用,不需要value,直接{{XXX}}。
Ref接收的数据类型:基本类型,对象类型。
const a = ref(1);
const a = ref('1');
const a = ref(true);
const a = ref({});
const a = ref([])
基本数据类型:响应式依靠的是object.defineProperty()的get和set。
对象类型:内部求助了vue3的一个新函数——reactive函数。
Reactive函数
<script setup>
import { ref, reactive } from 'vue';
// 数据
let name = ref('张三');
let age = ref(18);
let job = reactive({
type: '前端工程师',
salary: '30k',
a: {
b: {
c: 666
}
}
});
let hobby = reactive(['抽烟', '喝酒', '烫头']);
// 方法
function changeInfo() {
name.value = '李四';
age.value = 48;
job.type = 'UI设计师';
job.salary = '60k';
job.a.b.c = 999;
hobby[0] = '学习';
}
</script>
语法:const 代理对象 = reactive(原对象),接受一个对象或数组,返回一个代理对象(proxy的实例对象,简称proxy对象)。
Reactive定义的响应式数据是’深层次’的。
内部基于ES6的proxy实现,通过代理对象操作源对象内部数据进行操作。
对比reactive和ref
- 从定义数据角度对比
- 从原理角度对比
- 从使用角度对比