【vue3】入门系列—vue3的ref和reactive

ref

RefImpl:引用对象,如果想让一个普通变量变成响应式的,就需要把这个变量丢给ref。

在这里插入图片描述
在这里插入图片描述

修改的时候需要使用name.value进行修改。使用的时候直接使用name字段就行。
补充:const obj={name:’li’}定义的对象是可以修改对象里面的属性,如:obj.name = ‘ni’ 但是不可以修改整个对象,比如:obj = {name:’ni’}

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函数

作用:定义一个对象类型的响应式数据(基本类型不要用它,要用ref函数)。
使用ref定义的响应式数据,在js中修改的时候必须加上.value;使用reactive定义的响应式数据,不用.value就可以进行修改,无论对象层级有多深,数组也可以直接用索引来修改。

<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

  1. 从定义数据角度对比

Ref用来定义:基本数据类型。
Reactive用来定义:对象(或数组)类型数据。
备注:ref也可以定义对象(或数组)类型数据,它内部会自动通过reactive转为代理对象。

  1. 从原理角度对比

Ref通过object.defineProperty()的get和set来实现响应(数据劫持)。
Reactive通过proxy来实现响应式(数据劫持),通过Reflect来操作源数据内部。

  1. 从使用角度对比

Ref定义的数据,操作数据需要使用.value,模板中使用数据不需要使用.value。
Reactive定义的数据,操作数据与读取数据,均不需要使用.value。

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Vue 3的`ref`和`reactive`是两个核心的概念,它们在数据绑定和响应式系统起着重要作用。 1. `ref`: - `ref`是一个特殊的对象,它包装了一个基本类型的值(如字符串、数字或对象)和一个当前值的getter/setter。当你使用`ref`时,Vue会自动跟踪它的值并确保视图更新。 - 它主要用于存储和操作复杂的数据结构,例如对象和数组,因为这些类型不能直接用作模板的绑定目标。 - 示例: ```javascript const count = ref(0); // 创建一个数字类型的引用 ``` - 相关问题: 1. `ref`主要适用于哪种数据类型? 2. 什么时候会在Vue组件使用`ref`而不是直接绑定变量? 3. 如何使用`ref.value`获取内部存储的原始值? 2. `reactive`: - `reactive`是Vue提供的一个更高阶的功能,用于将整个对象转换为响应式的。当你调用`reactive(obj)`时,Vue会对对象的所有属性进行深度观察,并将其转换为响应式数据。 - 对象内部的变化会自动更新视图,反之亦然。`reactive`通常用于初始化复杂的组件状态,它可以包含嵌套的对象和数组。 - 示例: ```javascript const user = reactive({ name: 'Alice', age: 30 }); ``` - 相关问题: 1. 什么情况下你会选择使用`reactive`而不是单独创建多个`ref`? 2. `reactive`能处理哪些数据类型? 3. `reactive`如何确保视图与数据的一致性? 总结一下,`ref`侧重于管理单个值,而`reactive`用于管理整个可变对象,它们都是Vue3实现数据绑定和响应式设计的关键工具。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值