Vue3 Composition API: 对比ref和reactive

news2024/11/19 4:45:07

Vue2 回顾

首先回顾一下在Vue2中我们是如何创建一个响应式数据 (reactive data)的:
在这里插入图片描述

Vue3新特性

ref的使用

而在Vue3中,我们可以用Composition API: ref 来改写上述代码:
在这里插入图片描述
ref 的作用就是将一个原始数据类型(primitive data type)转换成一个带有响应式类型

的数据类型,原始数据类型共有7个,分别是:

  • String
  • Number
  • BigInt
  • Boolean
  • Symbol
  • Null
  • Undefined

相比于Vue2,用ref 的好处就是传值时可以不用再写this
那么,如果我想让一个对象(Object)也具有响应性(reactive) 这一特点呢?

reactive的使用

Vue3提供了一个方法:reactive (等价于Vue2中的Vue.observable() )来赋予对象(Object) 响应式的特性,那么我们可以将上述代码用对象的形式改写为:
在这里插入图片描述
你可能会觉得data.xxx 的写法太麻烦,那么我们可以使用es6新语法扩展运算符来简化一下:
在这里插入图片描述

Bug出现

不出意外,你会发现这个简化后的代码竟然无效,不管怎么点按钮,页面并没有发生变化!事实上,这样写没有效果的原因就在于一个响应型对象(reactive object) 一旦被销毁或展开(如上面代码那样),其响应式特性(reactivity)就会丢失。通过类型检查我们可以知道,虽然 data.title 的值确实发生了变化,但data.title的类型只是一个普通的字符串(String) ,并不具有响应式特性(reactivity),故而页面也没有随着其值的变化而重新渲染。

toRefs的作用

为了解决上述问题,Vue3又提供了一个新的API:toRefs,它可以将一个响应型对象(reactive object) 转化为普通对象(plain object),同时又把该对象中的每一个属性转化成对应的响应式属性(ref)。说白了就是放弃该对象(Object)本身的响应式特性(reactivity),转而给对象里的属性赋予响应式特性(reactivity)。故而我们可以将代码修复成下面这样:
在这里插入图片描述

总结

ref 和 reactive 一个针对原始数据类型,而另一个用于对象,这两个API都是为了给JavaScript普通的数据类型赋予响应式特性(reactivity)。根据Vue3官方文档,这两者的主要区别在于每个人写JavaScript时的风格不同,有人喜欢用原始数据类型(primitives),把变量单独拎出来写;而有人喜欢用对象(Object),把变量当作对象里的属性,都写在一个对象里头,比如:

let x = 0
let y = 0

function updatePosition(e) {
  x = e.pageX
  y = e.pageY
}
// --- compared to ---
const pos = {
  x: 0,
  y: 0
}

function updatePosition(e) {
  pos.x = e.pageX
  pos.y = e.pageY
}

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

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

相关文章

NPM 2FA双重认证的设置方法

NPM在使用用户名和密码登录后,他觉得还不是很安全,需要用一个手机软件来生成一个随机验证码,两者同步,来做二次验证。类似于手机银行的优盾或者验证码验证。 双重验证:标准验证方法,其中一个因素是密码。 …

gdb调试跟踪代码

编译 用gcc/g编译源程序的时候,编译后的可执行文件不会包含源程序代码,如果要使用gdb调试的话,编译的时候要加 -g 的参数。 gcc test.c -o test -g调试 gdb test常用命令: (gdb)help:查看命令…

jira-dev-tool插件安装失败的解决方法

最近,在运行【React React Hook TS 最佳实践仿 Jira 企业级项目】的时候,安装jira-dev-tool 插件出现问题,参考:https://www.npmjs.com/package/jira-dev-tool。解决方法:在项目中执行: npx msw init pu…

Layer2 实现方式之 Rollup

一. 1. Rollup 简介 Rollup 是类似于 Plasma 的第 2 层扩展解决方案:单个主链合约持有所有资金和对更大“侧链”状态(通常是账户、余额及其状态的 Merkle 树)的简洁加密承诺。侧链状态由链下用户和运营商维护,不依赖 L1 存储&…

C语言文件读写

上一章我们讲解了 C 语言处理的标准输入和输出设备。本章我们将介绍 C 程序员如何创建、打开、关闭文本文件或二进制文件。 一个文件,无论它是文本文件还是二进制文件,都是代表了一系列的字节。C 语言不仅提供了访问顶层的函数,也提供了底层…

linux------基本操作指令(1)

1)JAVA是一个跨平台的编程语言,多线程编程,网络编程在JAVA标准库里面本身就有 2)C的标准库相比于JAVA的标准库还是要弱一些,网络编程已经不支持了 3)linux是世界上第一大操作系统 李纽克斯 李娜克斯 李呢克斯 李妮克斯 一:背景知识 1)内网I…

串口监听:以共享模式打开端口CreateFile,居然无法再打开?但文件可以。

想以共享模式来监听串口 结果打开失败,错误5 拒绝访问。为什么呢? 但是文件却正常 看了两个监听串口的软件bus hound和commMonitor都是需要驱动才能实现 单纯共享打开,可以无法监听串口,那学习一下windows驱动吧。 windows驱动 …

为加快项目开发进度,如何快速合理分配开发任务?

1、对任务进行合理分类 软件开发项目,任务繁多,需要对任务进行分类,以便优先完成重要任务。一般最常规的方法是时间四象限法,即按照重要和紧急程度对任务进行划分:重要紧急、重要不紧急、紧急不重要、不重要不紧急四类…

UE4 Shader 常用函数 学习笔记

Add:快捷键a 将两数相加,也可以将两纹理相加,如下图: append(追加): Subtract(减): 和加相反,特例,如下: Abs&#xff0…

企业需要防范的 6 个常见身份攻击手段|身份云研究院

零信任作为新一代的网络安全防护理念,已经成为全球网络安全管理的基石。零信任的核心是 「安全体系架构从网络中心化走向身份中心化」,「以身份为中心」的网络访问控制理念也逐渐被越来越多企业接受并实践。 然而企业在面向用户身份访问和管理的实践中还…

一文读懂锁、互斥量、原子操作的并发控制策略

前言:在程序设计过程中,难免涉及操作系统、多进程、多线程、数据库等领域。在这些领域内,确保对共享资源的异步操作不出差错,是每个程序开发者必须要考虑的问题。面对并发问题,除了需要谨慎和小心外,引入并…

《图解TCP/IP》阅读笔记(第七章 7.7)——MPLS 多协议标记交换技术

7.7 MPLS 由小而大的讲完了三种路由协议RIP、OSPF、BGP之后,我们来看在转发IP数据包时使用到的另外一种技术——标记交换技术。 路由技术基于IP地址中的最长匹配原则进行转发,而标记交换则对每个IP包都设定一个叫做“标记”的值,根据该标记…

数据结构与算法-堆

什么堆 堆是一种特殊的数据结构,是最高效的优先级队列。可以被看作是一颗完全的二叉树表达的数组对象。 堆的定义 1、必须是一颗完全二叉树 完全二叉树就是子节点必须从左到右都是完整的,没有缺失。 2、用数组表示看作完全二叉树的堆 假设&#xff1a…

基于MYSQL的互联网药品交易系统数据库设计项目实战

说明:这是一个数据库课程设计实战项目(附带代码文档视频讲解),如需代码文档视频讲解可以直接到文章最后获取。 项目背景 疫情期间实体经济收到打击,实体药店经营困难,医院也面临着疫情患者的压力运转着&…

window安装Docker Desktop for Windows(基于WSL2)

目录一 什么是Ducker二 安装Ducker1 window for Linux子系统环境搭建1.1 打开系统虚拟机平台和WSL(适用于Linux的window子系统)1.2安装WSL21.3为什么用wsl2,不用wsl11.4 下载集成支持linux内核的wsl21.5 设置WSL默认版本二、安装Ubuntu20.04LTS1 打开Microsoft Stor…

解析某音短视频X-Bogus

文章目录写在前面目标正向梳理主要加密函数主要算法解析逆向梳理结论测试进阶写在后面写在前面 首先推荐一篇资料: 某音短视频 X-Bogus 逆向分析,JSVMP 纯算法还原 这篇文章介绍了通过插桩日志抠算法的过程,很有参考价值。 文章已经实现的部…

什么是外汇跟单?外汇MT4自动跟单系统靠谱吗?

对于很多刚刚进入外汇市场的新手投资者而言,必须踏踏实实学习基础知识和交易技巧,才能在外汇市场获取盈利,因为在没有任何专业知识的情况下,想要在外汇市场盈利是一件非常艰难的事情。而一些脑洞大开的外汇新手投资者却在思考&…

第7章 分页之模型分页(物理分页)

模型分页主要通过前端页面中的分页控件,向后端指定路由(控制器行为方法),传递相等的参数,然后间接的通过后端程序从数据库指定表中获取一些指定行的数据,然后把这些数据在前端页面渲染显示出来。模型分页的主要用于前端页面与后端…

Java开发 - 数据库索引的数据结构

目录 前言 题外话 什么是索引 索引的使用场景 索引的失效瞬间 索引的数据结构 Tree BTree BTree 索引提高查询效率的原因 索引的分类 innodb的特点 聚簇索引 非聚簇索引 索引操作 创建索引 查询索引 删除索引 外键 结语 前言 上一章中讲解了慢sql优化的方…

快速诊断I/O性能问题

背景客户反馈最近一段时间数据库运行缓慢,磁盘的压力很大,现在有两种不同的分析结论,存储设备性能下降和数据库压力变大,请我们进行系统的分析,给一个结论 现象 登录SQL专家云,进入性能指标页面&#xff0c…