Vue3中通过ref函数和reactive函数实现响应式数据

ref函数 

作用: 定义一个响应式的数据

语法: const xxx = ref(initValue)

  • 创建一个包含响应式数据的引用对象(reference对象,简称ref对象)

  • JS中操作数据: xxx.value

  • 模板中读取数据: 不需要.value,直接:

    {{xxx}}

  • 
    
    
    

    在fn方法中我们打印了一下name属性 控制台中输出的为一个响应式数据的引用对象(reference对象,简称ref对象)Vue3中通过ref函数和reactive函数实现响应式数据_第1张图片

备注:

  • 接收的数据可以是:基本类型、也可以是对象类型。

  • 基本类型的数据:响应式依然是靠Object.defineProperty()getset完成的。

  • 对象类型的数据:内部 “ 求助 ” 了Vue3.0中的一个新函数—— reactive函数。

 reactive函数

  • 作用: 定义一个对象类型的响应式数据(基本类型不要用它,要用ref函数)

  • 语法:const 代理对象= reactive(源对象)接收一个对象(或数组),返回一个代理对象(Proxy的实例对象,简称proxy对象)

  • Vue3中通过ref函数和reactive函数实现响应式数据_第2张图片

    对Proxy不是很熟悉的小伙伴可以看一下我的另一篇文章Proxy代理

  • reactive定义的响应式数据是“深层次的”。

  • 内部基于 ES6 的 Proxy 实现,通过代理对象操作源对象内部数据进行操作。

  • 
    
    
    

reactive对比ref

  • 从定义数据角度对比:

    • ref用来定义:基本类型数据

    • reactive用来定义:对象(或数组)类型数据

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

  • 从原理角度对比:

    • ref通过Object.defineProperty()getset来实现响应式(数据劫持)。

    • reactive通过使用Proxy来实现响应式(数据劫持), 并通过Reflect操作源对象内部的数据。

  • 从使用角度对比:

    • ref定义的数据:操作数据需要.value,读取数据时模板中直接读取不需要.value

    • reactive定义的数据:操作数据与读取数据:均不需要.value

你可能感兴趣的:(Vue3学习笔记,vue.js)