Vue - ref( ) 和 reactive( ) 响应式数据的使用

server/2025/1/24 4:11:06/

一、ref( )

在 Vue 3 中,ref() 是一个用于创建响应式引用的函数。它是 Vue 3 Composition API(组合式API) 的一部分,允许在组件中创建响应式数据

使用对象:基本数据类型(String 、Number 、Boolean 、Null 等)、对象类型

****需要使用 . value 

1.引入ref () 函数

javascript">// 引入
import { ref } from 'vue';

2.  创建响应式引用

javascript">// 定义 响应式数据  在 <script> 标签中
// 在 <script> 标签中写的 JS 代码 , 都需要写 .value 来获取值
const name = ref('张三');
const age = ref(20);
const tel = '123xxxxxxxxxx';const count = ref(0); // 创建一个响应式的数字
const message = ref('Hello, Vue 3!'); // 创建一个响应式的字符串

3.  访问和修改引用的值

javascript">// 访问和修改引用的值// 使用 ref() 创建的响应式引用会返回一个对象// 该对象有一个 .value 属性来访问和修改其值console.log(count.value); // 0
count.value++; // 修改值
console.log(count.value); // 1

 4. 在模板中的使用

javascript"><template>// 在模板中,不需要使用 .value 。当在模板中使用时,ref 会自动解包<div class="person"><h2>姓名:{{ name }}</h2><h2>年龄:{{ age }}</h2><h2>地址:{{ tel }}</h2><button @click="changeName">修改名字</button><button @click="changeAge">修改年龄</button><button @click="showTel">查看电话</button><p>{{ count }}</p> <!-- 直接使用 count --><button @click="count++">Increment</button></div></template>

5.  与对象的结合使用

javascript">const user = ref({name: 'Alice',age: 25,
});// 访问和修改对象属性
console.log(user.value.name); // Alice
user.value.age++; // 修改属性
console.log(user.value.age); // 26

当我们在模板中使用了 ref 时,在改变了 这个 ref 的值时,Vue 会自动检测到这个变化,并且相应地更新 DOM。

ref ( ) 是基于 reactive( ) 编写的。  

二、reactive( ) 

Vue 3 中,reactive() 是一个用于创建响应式对象的函数。它是 Vue 3 组合式 API 的一部分,允许开发者将普通对象转换为响应式对象,从而在数据变化时自动更新视图。

使用对象:对象类型

****需要使用 . value 

1.导入 reactive ( ) 函数

javascript">// 从 Vue 中导入
import { reactive } from 'vue';

2.创建响应式对象 

javascript">// 创建响应式对象
const state = reactive({count: 0,message: 'Hello, Vue 3!',
});

3.  访问和修改响应式属性

javascript">// 访问和修改响应式属性
// 可以像访问普通对象一样访问和修改响应式对象的属性。
// Vue 会自动追踪这些属性的变化,并在它们变化时更新视图。console.log(state.count); // 0
state.count++; // 修改属性
console.log(state.count); // 1

4. 支持嵌套对象的响应性:

javascript">const state = reactive({user: {name: 'Alice',age: 25,},
});// 访问嵌套属性
console.log(state.user.name); // Alice// 修改嵌套属性
state.user.age++;
console.log(state.user.age); // 26

 

三、ref( ) 与 reactive( ) 的区别:

  • ref() 返回一个包含 .value 属性的对象,而 reactive() 返回的是一个直接可用的响应式对象。
  • reactive 重新分配一个新对象,会失去响应式。(可以使用Object.assign 来整体替换)。
  • 使用原则:
    • 若需要一个基本类型的响应式数据,必须使用 ref ; 
    • 若需要一个响应式对象,层级不深,ref ,reactive 都可以使用;
    • 若需要一个响应式对象,且层级较深,推荐使用 reactive。


http://www.ppmy.cn/server/160930.html

相关文章

ASP.NET Core 6.0 如何处理丢失的 Startup.cs 文件

介绍 .NET 6.0 已经发布&#xff0c;ASP.NET Core 6.0 也已发布。其中有不少变化让很多人感到困惑。例如&#xff0c;“谁动了我的奶酪”&#xff0c;它在哪里Startup.cs&#xff1f;在这篇文章中&#xff0c;我将深入研究这个问题&#xff0c;看看它移动到了哪里以及其他变化。…

office 2019 关闭word窗口后卡死未响应

最近关闭word文件总是出现卡死未响应的状态&#xff0c;必须从任务管理器才能杀掉word 进程&#xff0c;然后重新打开word再保存&#xff0c;很是麻烦。&#xff08;#其他特征&#xff0c;在word中打字会特别变慢&#xff0c;敲击键盘半秒才出现字符。&#xff09; office官网…

【机器学习实战中阶】使用Python和OpenCV进行手语识别

手语识别与机器学习 项目构思精要&#xff1a;本项目旨在帮助聋哑人&#xff0c;通过创建一个能够识别手语的检测器&#xff0c;促进他们与他人之间的交流。此手语识别系统利用机器学习技术&#xff0c;为聋哑人群体提供了一个宝贵的沟通工具。 使用 Python 和 OpenCV 进行手…

TypeScript 基础知识

前言&#xff1a; 只是一篇学习笔记&#xff01;&#xff01;&#xff01; 正文&#xff1a; // 1、字符串声明 let message: string "message"; // 2、数字 let age: number 25; // 3、布尔值 let isResult: boolean false; // 4、数组---- 可以使用 type[] 或…

Tensor 基本操作2 理解 tensor.max 操作,沿着给定的 dim 是什么意思 | PyTorch 深度学习实战

前一篇文章&#xff0c;Tensor 基本操作1 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 目录 Tensor 基本操作torch.max默认指定维度 Tensor 基本操作 torch.max torch.max 实现降维运算&#xff0c;基于指定的 d…

25.1.22学习内容

声明&#xff1a;该博文所有图片皆为截图笔记&#xff0c;仅为向所在组织证明今日所学内容&#xff0c;无任何盈利行为。

接口 V2 完善:基于责任链模式、Canal 监听 Binlog 实现数据库、缓存的库存最终一致性

&#x1f3af; 本文介绍了一种使用Canal监听MySQL Binlog实现数据库与缓存最终一致性的方案。文章首先讲解了如何修改Canal配置以适应订单表和时间段表的变化&#xff0c;然后详细描述了通过责任链模式优化消息处理逻辑的方法&#xff0c;确保能够灵活应对不同数据表的更新需求…

ssm-mybatisPlus学习笔记

注意&#xff01;mybatisPlus只能够进行单表操作&#xff0c;其他的仍需要mybatis 1.快速入门 编写启动类 MapperScan("com.atguigu.mapper") SpringBootApplication public class MainApplication {public static void main(String[] args) {SpringApplication.r…