目录

1.ref函数

2.reactive函数

3.reactive对比ref


1.ref函数

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

  • 语法: const xxx = ref(initValue)

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

    • JS中操作数据: xxx.value

    • 模板中读取数据: 不需要.value,直接:<div>{{xxx}}</div>

  • 备注:

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

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

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

App.vue

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

  1. ref 对于基本类型的数据确实采用 Object.defineProperty()走getset走的数据劫持方式
  2. 数据劫持才是响应式的根基, 我的劫持到你修改的数据,才能去写一个逻辑更新页面!
<template><h1>一个人的信息</h1><h2>姓名{{ name }}</h2><h2>年龄{{ age }}</h2><button @click="changeInfoHandle">修改个人信息</button>
</template><script>
import { ref } from "vue";
export default {name: "App",setup() {/** * 定义引用对象: *  RefImpl {__v_isShallow: false, dep: Set(1), __v_isRef: true, _rawValue: 'ls', _value: 'zs'}*  RefImpl : Reference 引用; Implement 实现。*  * **/ let name = ref("zs");let age = ref("18");// 修改数据 function changeInfoHandle() {name.value = "ls";age.value = "20";console.log(name, age);}return {name,age,changeInfoHandle,};},
};
</script>

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

<template><h1>一个人的信息</h1><h2>工作种类: {{ job.type }}</h2><h2> 薪水: {{ job.salary }}</h2><button @click="changeInfoHandle">修改个人信息</button>
</template><script>
import { ref, reactive } from "vue";
export default {name: "App",setup() {    let job = ref({ type: "前端工程师", salary: "30k" });// 修改数据function changeInfoHandle() {job.value.type = 'UI工程师', job.value.salary = '60k'console.log(job);}return {name,age,job,changeInfoHandle,};},
};
</script>

2.reactive函数

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

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

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

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

<template><h1>一个人的信息</h1><h2>姓名: {{ person.name }}</h2><h2>年龄: {{ person.age }}</h2><h2>工作种类: {{ person.job.type }}</h2><h2>薪水: {{ person.job.salary }}</h2><h2>测试数据c: {{ person.job.a.b.c }}</h2><h2>爱好: {{ person.hobby }}</h2><button @click="changeInfoHandle">修改个人信息</button>
</template><script>
import { ref, reactive } from "vue";
export default {name: "App",setup() {// reactive() : 处理响应式数据是深层次的; let person = reactive({name : "zs",age :"20",job : {type: "前端工程师",salary: "30k",a: {b: {c: 777}}},hobby: ['抽烟', '喝酒', '烫头']})// 修改数据function changeInfoHandle() {person.name = "ls";person.age = "20";person.job.type = "UI工程师";person.job.salary = "60k";person.job.a.b.c = 999person.hobby[0] = '学习'}return {person,changeInfoHandle,};}
};
</script>
<script>import { reactive } form 'vue'exprot default {name: 'App',setup() {let data = reactive ({person: {},student: {}})return { data }}            }    </script>

3.reactive对比ref

  • 从定义数据角度对比:

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

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

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

  • 从原理角度对比:

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

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

  • 从使用角度对比:

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

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

Day 04-常用Composition API_ref reactive 函数相关推荐

  1. 讨论常用的 MySQL 日期函数。

    讨论常用的 MySQL 日期函数. 日期函数和运算符用于日期和时间类型的数据进行操作并返回一个结果.以下是 MySQL 中常见的日期函数和运算符: ADDDATE().DATE_ADD(),为日期时间 ...

  2. saltstack常用的模块及函数

    saltstack常用的模块及函数 SaltStack模块介绍 查看指定模块module的用法 一个命令执行多个模块 network模块 network.calc_net network.connec ...

  3. php文件有哪几种,PHP常用的文件操作函数有哪些

    PHP常用的文件操作函数有哪些 本文主要总结的PHP文件操作函数.当然,这只是部分,还有很多,我没有列出来.欢饮阅读参考! 一 .解析路径: 1 获得文件名: basename(); 给出一个包含有指 ...

  4. python常用函数-Python小白必备的8个最常用的内置函数(推荐)

    Python给我们内置了大量功能函数,官方文档上列出了69个,有些是我们是平时开发中经常遇到的,也有一些函数很少被用到,这里列举被开发者使用最频繁的8个函数以及他们的详细用法 print() prin ...

  5. python常用内置函数总结-Python学习教程之常用的内置函数大全

    前言 内置函数,一般都是因为使用比较频繁或是元操作,所以通过内置函数的形式提供出来.在Python中,python给我们提供了很多已经定义好的函数,这里列出常用的内置函数,分享出来供大家参考学习,下面 ...

  6. [python]开发IC utility 一些常用的方法和函数和语法规则

    文章目录 字符串的replace 字符串的split 字符串的strip 循环for in 判断语句中的and not re.search与re.match 合并元素为一个字符串 判断提供的path是 ...

  7. python 常用内置函数_Python小白必备的8个最常用的内置函数(推荐)

    Python给我们内置了大量功能函数,官方文档上列出了69个,有些是我们是平时开发中经常遇到的,也有一些函数很少被用到,这里列举被开发者使用最频繁的8个函数以及他们的详细用法 print() prin ...

  8. C语言再学习 -- 常用头文件和函数(转)

    参看:C/C++常用头文件及函数汇总 linux常用头文件如下: POSIX标准定义的头文件 <dirent.h>        目录项 <fcntl.h>         文 ...

  9. Python中常用的高阶函数

    Python 中常用的高阶函数 ① filter(function,iterable)filter(function, iterable)filter(function,iterable)   过滤器 ...

最新文章

  1. 新网站如何推广 新建设的网站如何宣传
  2. [**奇文共赏**补充问题] 据说看五遍能懂的人智商 200
  3. Spring Boot Starters介绍
  4. Java基础知识回顾之七 ----- 总结篇
  5. 广告深度学习计算:异构硬件加速实践
  6. python怎么理解_讨论 - 廖雪峰的官方网站
  7. java工程如何跑起来的_你编写的Java代码是咋跑起来的?
  8. 高通、腾讯游戏牵手 运用5G等技术升级游戏体验
  9. Linux下dd查看磁盘的读写性能
  10. Arduino入门笔记(6):温度传感器及感温杯实验
  11. Python中的pip包管理工具被删除重新进行安装
  12. (实用工具分享)网页元素截图工具
  13. 1081. 不同字符的最小子序列
  14. linux查看cpu核数命令,Linux系統下如何查看CPU型號、核心數量、頻率和溫度?
  15. 考PRINCE2有用么?
  16. chromeos java安装_谷歌最新系统ChromeOS安装体验,酷!
  17. AI(人工智能)园区顶层设计方案(ppt)
  18. 如何在CAD中快速定位坐标?
  19. ArkID 一账通:企业级开源IDaaS/IAM平台系统
  20. 共享计算机添加打印机后无法打印机驱动,打印机无法打印原因?打印机设置共享的方法...

热门文章

  1. python语言描述兰伯特pdf_数据结构PYTHON语言描述 [美] Kenneth A. Lambert 兰伯特
  2. 一文读懂数据治理怎么做
  3. 一首沉下来特别好听的歌
  4. mapi java_[Security:090504]Certificate chain received from mapi.alipay.com
  5. springboot banner.txt文件
  6. jQuery添加插入元素技巧
  7. 介绍计算机的英语作文,总算晓得写一篇介绍电脑的英语作文
  8. linux 基础上机练习,Linux上机练习题shell程序设计基础.docx
  9. 国内PLM用户满意度调研完整版
  10. 如何在spring事务提交成功后再进行异步操作