Vue3——ref和reactive的基础使用

基本概念:

1、ref:用于创建一个响应式对象,接收一个参数,这个参数可以是任意类型的,这是ref和reactive的区别之一,不管是基本类型还是引用类型的参数,ref创建的对象都是响应式的,但是ref创建出来的对象必须要通过.value进行取值;
2、reactive:用于创建一个响应式对象,接收一个参数,这个参数的类型,在源码中首先会判断传入的参数类型是不是一个对象,如果不是则不做任何处理,直接返回,同时开发环境下会在控制台输出一个警告,所以严格意义上说在使用reactive去创建对象的时候,并不是不能传入基本类型的数据,可以传,只是这种数据不具备响应式;

重新赋值问题:

最近在使用vue3写项目的时候,发现使用reactive创建的对象,在重新赋值的时候,该对象是会失去响应式的,数据发生了改变,但是视图并没有更新,后来改用ref创建对象,进行重新赋值的时候,对象仍然具有响应式。

let form1 = ref({
  name: "张三",
  age: 18
});
let form2 = reactive({
  name: "李四",
  age: 20
});
form1.value = {  // 数据改变了,同时视图也会更新
  name: "王五",
  age: 10,
}
form2 = {  // 数据改变了,但是视图不会更新
  name: "王五",
  age: 10,
}

使用watch监听对象时:

let formInfo = ref({
    name: "张三"    
})
setTimeout(() => {
    formInfo.value.name = '李四'
})
watch(formInfo, () => {
    console.log(formInfo.value.name)  // 李四
}, {
    deep: true
})
使用reactive创建对象的时候,使用watch监听可以不加上deep: true,默认是深度监听,但是如果是使用ref创建的对象,在使用watch监听的时候,要想实现深度监听,必须手动设置deep: true;

总结:

1、对于响应式而言,ref支持基本类型和引用类型,而reactive仅支持引用类型;
2、如果需要对引用数据类型进行重新赋值的时候,推荐使用ref进行响应式的创建,记得使用.value进行取值和赋值行为。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值