VUE3 组合式 API 中,ref 和 reactive 是两种核心的响应式数据处理方式

ops/2025/1/17 3:13:33/

在 Vue 3 的组合式 API 中,refreactive 是两种核心的响应式数据处理方式,用于创建响应式对象。它们都使得数据变得响应式,当数据发生变化时,视图会自动更新。

1. ref

ref 用于创建一个响应式的基本数据类型(如字符串、数字、布尔值、null 等)或对象的引用。它会返回一个包含 .value 的对象。对 .value 进行修改时,视图会自动更新。

使用 ref
  • 用于创建一个简单的响应式数据。
  • ref 可以用于基本数据类型,也可以用于对象类型,但它的使用方式略有不同(需要通过 .value 来访问和修改)。
示例:
<template><div><p>{{ count }}</p><button @click="increment">Increment</button></div>
</template><script setup>
import { ref } from 'vue'// 创建一个响应式变量 count
const count = ref(0)// 定义一个方法来更新 count
const increment = () => {count.value++
}
</script>
解释:
  • count 是通过 ref(0) 创建的一个响应式数据。
  • count.value 是获取和修改这个响应式数据的方式。
  • 在模板中直接使用 count,Vue 会自动处理 count.value

2. reactive

reactive 用于创建一个响应式的对象或数组。与 ref 不同的是,reactive 创建的是一个深度响应式的对象,能够追踪对象的所有嵌套属性。你不需要访问 .value,可以直接使用对象的属性。

使用 reactive
  • 用于创建响应式对象。
  • 对象的嵌套属性也会变成响应式。
示例:
<template><div><p>{{ user.name }}</p><button @click="changeName">Change Name</button></div>
</template><script setup>
import { reactive } from 'vue'// 创建一个响应式对象
const user = reactive({name: 'John',age: 30
})// 修改对象的属性
const changeName = () => {user.name = 'Alice'
}
</script>
解释:
  • user 是通过 reactive 创建的响应式对象。
  • 可以直接访问和修改 user.nameuser.age,不需要 .value

区别:ref 与 reactive

特性refreactive
数据类型用于基本数据类型(数字、字符串、布尔值等)和对象用于对象、数组等复杂类型
修改方式通过 .value 访问和修改数据直接访问和修改对象的属性
响应性范围只能响应单一的值(基本类型、对象/数组的引用)创建深度响应式对象,自动响应对象内嵌的属性
适用场景基本数据类型、DOM 引用、对象引用(简易情况)对象和数组的深度响应式处理

选择使用 ref 或 reactive

  • 如果你只是处理一个简单的数据(如数字、字符串等),使用 ref
  • 如果你需要创建一个响应式对象或者数组,并且要跟踪其所有的嵌套属性,使用 reactive

注意:

  • reactive 创建的对象是深度响应式的,意味着对象中的嵌套属性会自动成为响应式。
  • ref 对于对象也是响应式的,但需要通过 .value 来访问和修改。
  • 如果你有一个对象并且希望直接使用其属性而不通过 .value,可以考虑使用 reactive

示例:结合使用 ref 和 reactive

你也可以在同一个组件中同时使用 refreactive,例如:

<template><div><p>{{ user.name }} - {{ count }}</p><button @click="increment">Increment</button><button @click="changeName">Change Name</button></div>
</template><script setup>
import { ref, reactive } from 'vue'// 创建一个响应式对象
const user = reactive({ name: 'John', age: 30 })// 创建一个响应式数字
const count = ref(0)// 定义方法修改数据
const increment = () => {count.value++
}const changeName = () => {user.name = 'Alice'
}
</script>

在这个示例中,user 是一个响应式对象,而 count 是通过 ref 创建的响应式数字。两者可以并行使用,且视图会随着数据变化自动更新。

总结:

  • ref 适用于创建简单类型(如基本数据类型或单个对象的引用)的响应式数据。
  • reactive 适用于创建对象或数组的深度响应式数据。
  • 选择哪个取决于你的需求,简单数据用 ref,复杂数据(对象、数组等)用 reactive

http://www.ppmy.cn/ops/150701.html

相关文章

MacOS删除多余的Windows启动项

我的Macbook之前通过BootCamp安装了windows后又删除了&#xff0c;但是开机按住option键还是会出现Windows 启动盘选项&#xff0c;虽然没什么影响但还是觉得有问题&#xff0c;搜索一番找到删除方法&#xff0c;记录一下。主要问题是windows在Mac的EFI分区添加了相关内容&…

本地视频进度加入笔记+根据进度快速锁定视频位置

本地视频进度记录快速回溯 引言 在学习的过程中, 如果我们想快速记录当前看视频的位置, 后续回溯查找就会非常方便了。 实现效果 进度记录 通过按下快捷键ctrlaltu&#xff0c; 快速记录当前视频的进度信息,然后复制到typora软件内 快速回溯 在typora软件内, 选中视频索引…

Mysql--实战篇--数据库设计(范式和反范式,数据表设计原则)

一、范式和反范式 在数据库设计中&#xff0c;范式&#xff08;Normalization&#xff09;和反范式&#xff08;Denormalization&#xff09;是两种不同的设计理念&#xff0c;它们分别用于优化数据库的结构以满足不同的需求。范式主要用于减少数据冗余和提高数据完整性&#…

如何通过openssl生成.crt和.key

生成 .crt&#xff08;证书文件&#xff09;和 .key&#xff08;私钥文件&#xff09;的过程通常涉及使用加密工具或库来创建密钥对&#xff0c;并生成证书请求&#xff0c;最终由证书颁发机构&#xff08;CA&#xff09;或自签名生成证书。以下是生成 .crt 和 .key 文件的详细…

【leetcode21】344.反转字符串

原题链接 双指针法 原地反转字符串 class Solution {public void reverseString(char[] s) {int i0;int js.length-1;while(i<j){char tmps[i];s[i]s[j];s[j]tmp;i;j--;}} }

爬虫程序如何存储数据到数据库?

将爬虫程序中获取的数据存储到数据库是一个常见的需求&#xff0c;这不仅可以方便地管理和查询数据&#xff0c;还可以为后续的数据分析和应用提供支持。以下是一个详细的步骤指南&#xff0c;介绍如何将爬虫程序中获取的数据存储到数据库中&#xff0c;以 MySQL 为例。 一、准…

YOLOv10-1.1部分代码阅读笔记-downloads.py

downloads.py ultralytics\utils\downloads.py 目录 downloads.py 1.所需的库和模块 2.def is_url(url, checkFalse): 3.def delete_dsstore(path, files_to_delete(".DS_Store", "__MACOSX")): 4.def zip_directory(directory, compressTrue, ex…

链家房价数据爬虫和机器学习数据可视化预测

完整源码项目包获取→点击文章末尾名片&#xff01;