ref和reactive的区别

610 阅读1分钟

ref是把值类型添加一层包装,使其变成响应式的引用类型的值, reactive则是引用类型的值变成相应式的值, 所以ref和reactive的区别只是在于是否需要添加一层引用包装

本质上

ref(0) --> reactive({value:0})

ref

数据响应式监听。 ref 函数传入一个值作为参数,一般传入基本数据类型,返回一个基于该值的响应式Ref对象,该对象中的值一旦被改变和访问,都会被跟踪到,就像我们改写后的示例代码一样,通过修改 count.value 的值,可以触发模板的重新渲染,显示最新的值

reactive

reactive是用来定义更加复杂的数据类型,但是定义后里面的变量取出来就不在是响应式Ref对象数据了,所以需要用toRefs函数来转化为响应式数据对象

ref对于 基本类型

ref创建出来的数据和以前无关,与js中的基本类型表现一致

let a=1;
let aRef=ref(a);
此时 a与aRef是两个无关的数据
console.log(a,aRef.value); //1,1

a=2
console.log(a,aRef.value); //2,1

aRef.value=3
console.log(a,aRef.value); //2,3

ref 对于引用数据类型

创建出来的数据与以前的数据相关,与js中的引用数据类型表现一致

let obj = { name: "1" };
let stateRef = ref(obj);
console.log("obj", obj.name);
console.log("ref", stateRef.value.name);
// obj 1
// ref 1

stateRef.value.name = '2';
console.log("obj", obj.name);
console.log("ref", stateRef.value.name);
// obj 2
// ref 2


obj.name='3'
console.log("obj", obj.name);
console.log("ref", stateRef.value.name);
// obj 3
// ref 3

注:*toRef数据发生改变, 界面也不会自动更新*