首页 > 其他分享 >谈谈Vue3中的ref和reactive

谈谈Vue3中的ref和reactive

时间:2023-01-31 11:55:11浏览次数:66  
标签:定义 reactive 数据类型 响应 Vue3 ref

一、是什么?

ref和reactive是Vue3中用来实现数据响应式的API
一般情况下,ref定义基本数据类型,reactive定义引用数据类型
(我喜欢用它来定义对象,不用它定义数组,原因后面讲)
我理解的ref本质上是reactive的再封装

二、先聊reactive

reactive定义引用数据类型(以对象和数组举例),它能够将复杂数据类型的内部属性或者数据项声明为响应式数据,所以reactive的响应式是深层次的,其底层是通过ES6的Proxy来实现数据响应式,相对于Vue2Object.defineProperty,具有能监听增删操作,能监听对象属性的变化等优点

使用reactive定义对象数据类型举例

const paginationConfig = reactive({
	pageNum = 1,
	pageSize = 10
}) // 定义

const onChange = () => {
	paginationConfig.pageNum = 2 // js使用
	paginationConfig.pageSize = 20 // js使用
}
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
<!-- Vue3模板引用使用 -->
<a-pagination v-model:current="paginationConfig.pageNum"></a-pagination>
 
  • 1
  • 2

若用reactive定义基本数据类型,Vue3会报警告错误,如图

const str = reactive('我是字符串')
 
  • 1

控制台报错
源码解析
分析Vue3源码可知,使用reactive定义响应式数据时,若数据不是对象类型直接就返回了,就不会进行后续的数据响应式处理了,这也就是我只用reactive定义对象型响应式数据的原因,那数组类型数据怎么办呢?答案在下文中可以找到

三、再聊ref

为什么我会理解成ref是reactive的再封装,因为在ref的底层源码里最终还是reactive()来实现的
在这里插入图片描述
在这里插入图片描述
由源码分析得知,如果是对象类型,底层走的还是reactive()的逻辑,另外我们知道,使用ref定义基本数据类型时,在脚本里使用时,需要加.value后缀,然而在模板里不需要,这是因为Vue3会自动帮你加上,这就使得ref相比reactive更加简单

let num = ref(0) // 定义
let isShow = ref(false)  // 定义

const onChange = () => {
	num.value++  // js使用
	isShow.value = true  // js使用
}
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
<!-- Vue3模板引用使用 -->
<a-modal v-model:visible="isShow"></a-modal>
 
  • 1
  • 2

四、ref和reactive定义数组对比(待补充)

五、对比总结(待补充)

 

标签:定义,reactive,数据类型,响应,Vue3,ref
From: https://www.cnblogs.com/sexintercourse/p/17078530.html

相关文章

  • vue3 之 ref
    vue3之ref vue2中的ref获取一个dom元素和实例对象 vue3中ref是用来定义数据响应式特别注意:ref可以接收基本数据类型,也可以是对象类型1、基本数据类型......
  • ifc4x3 附录E示例-Georeference_Tin_5
    ifc4x3附录E示例-Georeference_Tin_5示例概述(x,y)坐标中的位数。当时,一些测量软件仍然是基于DOS的,使用的精度很低。之所以使用这种原点选择,是因为小数点之前的最后3位数字......
  • 为什么vue3要使用ref
    vue3中使用ref来创建响应式数据,让习惯了选项式API的我很不习惯。因为得使用xxx.value来读写响应式数据,没有vue2中直接使用this.xxx来读写简洁。vue3这样设计的原因是原生J......
  • Firefly Amazon UK PC control installation tutorial
    FireflyAmazonUKPCcontrolinstallationtutorial1.TurnoffthePCfirewallandanti-virussoftware,itisbesttouninstalltheanti-virussoftware2.Downl......
  • Firefly Amazon PC control installation tutorial
    FireflyAmazonPCcontrolinstallationtutorial1.TurnoffthePCfirewallandanti-virussoftware,itisbesttouninstalltheanti-virussoftware2.Download......
  • Vue2 和 Vue3 的不同之处
    1、双向绑定的更新 vue2是采用的ES5的⼀个API叫做object.definePropert 对数据进⾏劫持结合发布订阅模式vue3是采用的ES6的一个API叫做Proxy......
  • Firefly Amazon US PC control installation tutorial
    FireflyAmazonUSPCcontrolinstallationtutorial1.TurnoffthePCfirewallandanti-virussoftware,itisbesttouninstalltheanti-virussoftware2.Downl......
  • ifc4x3 附录E示例-Georeference_Tin_4
    ifc4x3 附录E示例-Georeference_Tin_4示例概述意图IFC4x3RC1此场景中有一个带有两个颜色的锡。 IfcProjectedCRS中的EPSG代码规定了水平和垂直基准。EPSG代码用......
  • vue3+vite项目中使用qiankun的方式
    需要安装的依赖: "vite-plugin-qiankun":"1.0.10","vue-tsc":"^0.40.7""vite":"3.0.9","@vitejs/plugin-vue":"^1.6.0","vue":"^3.2.37","vue-router":......
  • vue3 重置数据
    第一种import{reactive}from'vue'classInitFormData{username:string=''sex:number=1age:number=0}letformData=reactive(newInitForm......