Vue 3 响应式 API 详解与实战案例

Vue 3 引入了全新的响应式系统,主要通过 ref 和 reactive 这两个 API 来实现。下面我将通过具体代码示例详细讲解它们的用法和区别。

1. ref - 基础响应式 API

ref 用于创建响应式的基本类型数据(如字符串、数字、布尔值),也可以用于对象和数组。

基本用法

import { ref } from 'vue'// 创建一个响应式的数字
const count = ref(0)// 创建一个响应式的字符串
const message = ref('Hello Vue 3!')// 创建一个响应式的布尔值
const isVisible = ref(false)

模板中使用

<template><div><p>{{ count }}</p><button @click="increment">增加</button></div>
</template><script setup>
import { ref } from 'vue'const count = ref(0)function increment() {count.value++ // 注意需要通过 .value 访问
}
</script>

为什么需要 .value

ref 返回的是一个响应式对象,这个对象有一个 .value 属性指向内部值:

  • 在 JavaScript 中需要通过 .value 访问

  • 在模板中自动解包,不需要 .value

2. reactive - 对象响应式 API

reactive 用于创建响应式的对象数组

基本用法

import { reactive } from 'vue'// 创建一个响应式对象
const user = reactive({name: '张三',age: 25,address: {city: '北京'}
})// 创建一个响应式数组
const list = reactive(['苹果', '香蕉', '橙子'])

模板中使用

<template><div><p>姓名: {{ user.name }}</p><p>年龄: {{ user.age }}</p><button @click="growUp">长大一岁</button></div>
</template><script setup>
import { reactive } from 'vue'const user = reactive({name: '张三',age: 25
})function growUp() {user.age++ // 直接修改属性,不需要 .value
}
</script>

3. 实际案例对比

案例1:计数器(ref vs reactive)

<template><!-- ref 实现 --><div><p>ref 计数: {{ count }}</p><button @click="count++">增加</button></div><!-- reactive 实现 --><div><p>reactive 计数: {{ state.count }}</p><button @click="state.count++">增加</button></div>
</template><script setup>
import { ref, reactive } from 'vue'// ref 方式
const count = ref(0)// reactive 方式
const state = reactive({count: 0
})
</script>

案例2:表单处理(reactive 更适用)

<template><form @submit.prevent="submitForm"><input v-model="form.username" placeholder="用户名"><input v-model="form.password" type="password" placeholder="密码"><button type="submit">提交</button></form>
</template><script setup>
import { reactive } from 'vue'const form = reactive({username: '',password: ''
})function submitForm() {console.log('提交数据:', form)
}
</script>

4. 何时使用 ref vs reactive

特性refreactive
适用类型基本类型、对象、数组对象、数组
模板访问自动解包,无需 .value直接访问属性
JS 中访问需要 .value直接访问属性
重新赋值可以整个替换不能直接替换整个对象
TypeScript 支持需要 Ref 类型直接使用接口类型

最佳实践建议

  1. 基本类型:使用 ref

const count = ref(0)

2. 对象/复杂数据结构:使用 reactive

const form = reactive({username: '',password: ''
})

3.组合使用:在对象中需要基本类型时

const state = reactive({count: ref(0), // 对象属性可以是 refname: 'Vue'
})
// 使用时 state.count 会自动解包

5. 实战案例:审批组件中的响应式使用

回到原始审批组件,我们可以看到实际应用:

// 使用 reactive 管理表单数据
const form = reactive({});// 使用 ref 管理组件状态
const visible = ref(false)
const loading = ref(false)
const formId = ref("")
const processName = ref('')// 使用 ref 引用子组件
const agreeHandler = ref();
const refuseHandler = ref();
const hospPlanRef = ref();

这种组合使用方式既保持了代码的简洁性,又充分利用了 Vue 3 响应式系统的能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件第三方测试:关键部分、意义、流程及方法全解析?

软件第三方测试是保障软件质量的关键部分&#xff0c;它由专业的机构来开展&#xff0c;这个机构不隶属于开发方和使用方&#xff0c;能以客观公正的视角找出软件问题。 测试意义 软件第三方测试意义重大&#xff0c;它依靠专业技术&#xff0c;依照严格流程&#xff0c;对软…

WPF TextBlock控件性能优化指南

WPF TextBlock控件性能优化指南 1. 引言 TextBlock作为WPF中最基础且使用最广泛的文本显示控件&#xff0c;其性能优化对整个应用程序的响应速度和资源占用有着重要影响。尽管TextBlock是一个轻量级控件&#xff0c;但在大型应用或需要显示大量文本的场景中&#xff0c;不恰当…

【Linux】关于虚拟机

一些在Linux驱动开发中使用虚拟机的经验。 部分图片和经验来源于网络&#xff0c;若有侵权麻烦联系我删除&#xff0c;主要是做笔记的时候忘记写来源了&#xff0c;做完笔记很久才写博客。 专栏目录&#xff1a;记录自己的嵌入式学习之路-CSDN博客 目录 1 VirtualBox使用技…

AimRT从入门到精通 - 04RPC客户端和服务器

一、ROS中的service通信机制 服务通信也是ROS中一种极其常用的通信模式&#xff0c;服务通信是基于请求响应模式的&#xff0c;是一种应答机制。也即&#xff1a;一个节点A向另一个节点B发送请求&#xff0c;B接收处理请求并产生响应结果返回给A。比如如下场景&#xff1a; 机器…

普通IT的股票交易成长史--20250502 突破(1)

声明&#xff1a;本文章的内容只是自己学习的总结&#xff0c;不构成投资建议。文中观点基本来自yt站方方土priceaction&#xff0c;综合自己的观点得出。感谢他们的无私分享。 送给自己的话&#xff1a; 仓位就是生命&#xff0c;绝对不能满仓&#xff01;&#xff01;&#…

《操作系统真象还原》调试总结篇

文章目录 前言第11章调试我们操作系统目前的内存管理现状 前言 上一章结尾调试还没有完成&#xff0c;本章开始前需要先完成上一章代码的调试。 总的来说&#xff0c;我们的操作系统目前有三大块内容&#xff1a;线程-进程内容、内存管理内容、中断内容。当然这三部分肯定不可…

【Machine Learning Q and AI 读书笔记】- 01 嵌入、潜空间和表征

Machine Learning Q and AI 中文译名 大模型技术30讲&#xff0c;主要总结了大模型相关的技术要点&#xff0c;结合学术和工程化&#xff0c;对LLM从业者来说&#xff0c;是一份非常好的学习实践技术地图. 本文是Machine Learning Q and AI 读书笔记的第1篇&#xff0c;对应原…

Flutter 学习之旅 之 Flutter 和 Android 原生 实现数据交互的MethodChanel和EventChannel方式的简单整理

Flutter 学习之旅 之 Flutter 和 Android 原生 实现数据交互的MethodChanel和EventChannel方式的简单整理 目录 Flutter 学习之旅 之 Flutter 和 Android 原生 实现数据交互的MethodChanel和EventChannel方式的简单整理 一、简单介绍 二、Flutter 和 Android 原生之间的数据…

outlook for mac本地邮件存放在哪儿?

尽管 PST 格式通常与 Microsoft Outlook 联系在一起&#xff0c;但认为它也在 Mac OS 上存储邮箱数据是一种误解。实际上&#xff0c;Outlook for Mac 不会将邮件存储为 PST 文件。无法在 Outlook for Mac 中找到 PST 文件位置&#xff0c;因为它不使用 PST 文件来存储邮箱数据…

数字时代,如何为个人信息与隐私筑牢安全防线?

首席数据官高鹏律师团队编著 在当今数字化时代&#xff0c;个人信息和隐私保护至关重要。我们在享受数字生活带来的便利时&#xff0c;也面临着个人信息泄露、隐私被侵犯的风险。下面将从先进技术和法律途径两个方面&#xff0c;探讨如何严格保护个人信息和隐私。 一、先进技…

MongoDB的图形化工具robo3t,navicat

MongoDB 常用的两个图形化工具 —— Robo 3T 和 Navicat 的详细介绍、区别和基本使用方法&#xff1a; &#x1f9f0; 一、Robo 3T&#xff08;原 Robomongo&#xff09; &#x1f4cc; 简介 Robo 3T 是一款专注于 MongoDB 的轻量级可视化客户端。由原 Robomongo 团队开发&am…

Qt QWebEngine应用和网页的交互

一、QWebEngine简介 1、Qt WebEngine模块提供了一个Web浏览器引擎&#xff0c;可以轻松地将万维网上的内容嵌入到没有本机Web引擎的平台上的Qt应用程序中。 2、Qt WebEngine提供了用于渲染HTML&#xff0c;XHTML和SVG文档的C 类和QML类型&#xff0c;它们使用级联样式表&#…

d202552-sql

一、184. 部门工资最高的员工 - 力扣&#xff08;LeetCode&#xff09; 要找到每个部门工资最高的 使用窗口函数 加排序函数 排序函数用rank dense_rank都行 把最高相同的找出来就行 select *, dense_rank() over(partition by departmentId order by Salary desc) as rank …

AntSK:基于大模型的一体化AI知识库解决方案深度解析

随着大模型&#xff08;如GPT、LLM&#xff09;技术的飞速发展&#xff0c;企业对智能知识管理和专属AI助手的需求日益增长。AntSK 正是在这一背景下诞生的企业级AI一体机解决方案。本文将从技术架构、核心功能、创新点和应用场景等方面&#xff0c;深入解析 AntSK 如何助力企业…

在Electron中爬取CSDN首页的文章信息

背景 之前分享了Electron入门的相关文章&#xff1a;https://gitee.com/ruirui-study/electron-demo 后来&#xff0c;我就想在里面多做一些演示给大家看&#xff0c;集成了以下功能及演示&#xff1a; 窗口管理、各种方法封装托盘管理菜单管理获取屏幕演示多窗口及通信演示…

bfs处理 推多米诺

前言&#xff1a;这个题目本来打算一次遍历来写&#xff0c;但是写的时候发现有点难搞&#xff0c;后面发现是 bfs &#xff0c;但是这个bfs 不是很好处理&#xff0c;后面看了题解&#xff0c;颇有感触 这个和堆处理的最短路是一样的&#xff0c;在取出一个位置的时候才对其进…

【Java IO流】File类基础详解

参考笔记&#xff1a;java File类基础 万字详解&#xff08;通俗易懂&#xff09;-CSDN博客 目录 1.前言 2. File类介绍 3. File类构造方法 4.File类常用的方法案例演示 4.1 创建文件/文件夹的方法 4.2 删除文件/文件夹的方法 4.3 判断文件/文件夹是否存在的方法 4.4 …

【业务领域】InfiniBand协议总结

InfiniBand协议总结 InfiniBand协议是什么&#xff1f;Infiniband产生的原因Mellanox公司介绍及其新闻基于TCP/IP的网络与IB网络的比较IB标准的优势什么是InfiniBand网络什么是InfiniBand架构Mellanox IB卡介绍InfiniBand速率发展介绍InfiniBand网络主要上层协议InfiniBand管理…

蒙特卡罗方法(Monte Carlo Method)​​:基于随机采样的数值计算与模拟技术

​​核心思想​​ 蒙特卡罗方法通过​​随机采样​​和​​统计模拟​​解决数学、物理、工程等领域的复杂问题&#xff0c;其核心是利用​​大数定律​​——当样本量足够大时&#xff0c;样本均值会收敛于期望值。 ​​关键特点​​&#xff1a; ​​无维度诅咒​​&#x…

【资料分享】全志T536(异构多核ARMCortex-A55+玄铁E907 RISC-V)工业核心板硬件说明书

前 言 本文为创龙科技SOM-TLT536工业核心板硬件说明书,主要提供SOM-TLT536工业核心板的产品功能特点、技术参数、引脚定义等内容,以及为用户提供相关电路设计指导。 为便于阅读,下表对文档出现的部分术语进行解释;对于广泛认同释义的术语,在此不做注释。