当前位置: 首页 > article >正文

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

一、ref( )

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

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

****需要使用 . value 

1.引入ref () 函数

// 引入
import { ref } from 'vue';

2.  创建响应式引用

// 定义 响应式数据  在 <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.  访问和修改引用的值

// 访问和修改引用的值

// 使用 ref() 创建的响应式引用会返回一个对象

// 该对象有一个 .value 属性来访问和修改其值

console.log(count.value); // 0
count.value++; // 修改值
console.log(count.value); // 1

 4. 在模板中的使用

<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.  与对象的结合使用

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

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

2.创建响应式对象 

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

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

// 访问和修改响应式属性
// 可以像访问普通对象一样访问和修改响应式对象的属性。
// Vue 会自动追踪这些属性的变化,并在它们变化时更新视图。

console.log(state.count); // 0
state.count++; // 修改属性
console.log(state.count); // 1

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

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.kler.cn/a/514516.html

相关文章:

  • 2024年博客之星主题创作|2024年度感想与新技术Redis学习
  • 雷电9最新版安装Magisk+LSPosd(新手速通)
  • 在centos上编译安装opensips【初级-默认安装】
  • 项目中使用的是 FastJSON(com.alibaba:fastjson)JSON库
  • 递归练习六(普通练习11-15)
  • C++经典例题
  • 22.日常算法
  • stm8s单片机(一) 工程塔建与第一个实验程序
  • 漏洞情报:为什么、要什么和怎么做
  • CrypTen——基于pytorch的隐私保护机器学习框架
  • Git进阶笔记系列(01)Git核心架构原理 | 常用命令实战集合
  • Julia语言的区块链
  • Java设计模式 三 工厂方法模式 (Factory Method Pattern)
  • HTML 基础入门:核心标签全解析
  • 深圳大学-计算机系统(3)-实验三取指和指令译码设计
  • simulink入门学习01
  • Redis、MongoDB 和 MySQL评估
  • IBM湖仓一体与向量数据库:访问MinIO控制台(Accessing the MinIO console)
  • AI对齐与开源发展:多学科融合创新之路
  • 第二讲 矩阵消元——用矩阵的左乘表示矩阵消元的过程
  • Spring注解篇:@RequestMapping详解
  • ESP-Mesh-Lite组网方案,赋能设备多场景联网通信,无线交互控制应用
  • PHP常见正则表达式
  • 不用安装双系统,如何在mac上玩windows游戏呢?
  • vim如何显示行号
  • 基于springboot+vue的校园二手物品交易系统的设计与实现