常用知识碎片 Vue3 ref和reactive (内含其他常用知识)

目录

ref和reactive

ref

reactive

总结:

setup语法糖

语法糖是啥?

Vue3 setup语法糖

Vue3 不使用setup语法糖示例:

Vue3 使用setup语法糖示例:

ref和eative主要区别


ref和reactive

在 Vue 3 中,ref 和 reactive 是用于创建响应式数据的不同方法,它们主要用于不同的场景:

ref

  • 主要用于创建基本类型的响应式引用,例如字符串、数字或布尔值。
  • ref 返回的是一个具有 .value 属性的对象,实际使用的通常是这个 .value。
  • 当你想要在模板中直接绑定或在计算属性中使用时,ref 非常有用。

 创建响应式对象:

  ref 方法创建一个响应式对象,它会跟踪对象的属性变化,并在这些变化发生时触发视图更新。要使用 ref 方法,您需要将一个对象作为参数传递给它,然后它将返回一个响应式对象。

示例:

import { ref } from 'vue';const count = ref(0);count.value++; // 触发视图更新

reactive

  • 用于创建复杂对象或数组的响应式引用,它不会包裹返回值,而是直接返回原始对象或数组。
  • 当你有一个复杂的对象结构并且希望整个对象都是响应式的时,使用 reactive 更加合适。

        创建响应式对象和代理对象:

  reactive 方法创建一个响应式对象和一个代理对象代理对象会跟踪对象的属性变化,并在这些变化发生时触发视图更新。要使用 reactive 方法,您需要将一个对象作为参数传递给它,然后它将返回一个响应式对象和一个代理对象。

示例:

import { reactive } from 'vue';const state = reactive({count: 0,
});state.count++; // 触发视图更新

小总结:

  • ref 创建一个响应式对象,它会跟踪对象的属性变化,并在这些变化发生时触发视图更新。
  • reactive 创建一个响应式对象和一个代理对象,代理对象会跟踪对象的属性变化,并在这些变化发生时触发视图更新。

以上示例代码都是 Vue3 中不使用语法糖 <script setup>的用法

setup语法糖

语法糖是啥?

        语法糖(Syntactic Sugar) 是编程语言中的一种设计概念,指的是那些为了提高代码的可读性和编写效率而引入的语法特性。这些特性并不会增加语言的基本功能,而是通过提供更加直观或简洁的语法来表达已有的概念,使得代码更加清晰和易于理解。
语法糖的例子包括但不限于:

  • 对象字面量:在JavaScript中,可以直接使用 { key: value } 的形式创建对象,而不是必须调用构造函数 new Object() 并使用 this.key = value 的方式。
  • 自动拆箱和装箱:在Java中,可以将基本类型如 int 和引用类型如 Integer 相互转换,而不需要显式地进行转换操作。
  • 范围for循环:许多语言中,如C#和Java,支持的 foreach 循环,它简化了数组或集合的遍历,而不需要手动管理索引。
  • 模式匹配:在一些函数式语言中,如Haskell或Scala,模式匹配允许你以更直观的方式处理数据结构,而无需显式的条件语句。

        语法糖的主要目的是使代码更加人性化,减少冗余,同时保持代码的逻辑和功能不变。这有助于减少编码错误,并使代码对其他开发者更加友好。然而,过度使用语法糖也可能导致代码变得难以理解和维护,尤其是当其使用方式不常见或非直观时。因此,合理使用语法糖是编程实践中的一项重要技能。

Vue3 setup语法糖

在 Vue 3 中,setup() 函数是组合 API 的核心部分,用于定义组件的响应式状态和逻辑。setup() 是在组件实例被创建后立即执行的,它接收两个参数:props 和 context。但在实际使用中,我们通常只关心 props,因为它包含了父组件传递过来的属性。
setup() 的基本用法
在 setup() 内部,你可以使用来自 Vue 的 Composition API 的各种函数,如 ref, reactive, computed, watch 等,来定义组件的状态和行为。

Vue3 不使用setup语法糖示例:

<template><div><p>{{ message }}</p><button @click="increment">Increment</button></div>
</template><script>
import { ref } from 'vue';export default {setup() {const count = ref(0);const message = ref('Hello Vue 3 + Composition API');function increment() {count.value++;}return {count,message,increment};}
};
</script>

        在这个例子中,setup() 定义了一个响应式的 count 变量一个 message 变量,以及一个 increment 方法。这些变量和方法将被暴露给模板使用。


setup() 的返回值
        setup() 函数的返回值会被合并到组件实例的公共作用域中,这意味着你可以在模板中直接访问这些返回的变量和函数。


setup() 的注意事项

  • setup() 函数只能在 <script setup> 语法糖中省略 return 关键字。在普通 <script> 标签中,你必须明确返回一个对象,其中包含你希望在模板中访问的所有属性和方法。
  •  setup() 函数不能访问 this 上的任何属性或方法,因为 this 在 setup() 执行时还未被创建。
  •  如果你使用了 props,确保在 setup(props) 中正确地接收并使用它们。

<script setup> 语法糖
        Vue 3 引入了 <script setup>,这是一种新的脚本标签,允许你直接在 <script setup> 标签内部定义和使用组合 API 的功能,而无需显式返回一个对象。这使得代码更加简洁和直接

Vue3 使用setup语法糖示例:

<template><div><p>{{ message }}</p><button @click="increment">Increment</button></div>
</template><script setup>
import { ref } from 'vue';const count = ref(0);
const message = ref('Hello Vue 3 + Composition API');function increment() {count.value++;
}
</script>

ref和reative主要区别

示例代码:

ref
<template><div>Count is: {{ count }}<button @click="increment">Increment</button></div>
</template><script setup>
import { ref } from 'vue';
const count = ref(0);// 修改ref的值
function increment() {count.value++;
}</script>
reactive
<template><div>Count is: {{ state.count }}Name is: {{ state.name }}<button @click="increment">Increment</button></div>
</template><script setup>
import { reactive } from 'vue';// 创建一个复杂类型的响应式对象
const state = reactive({count: 0,name: 'John Doe'
});// 修改reactive对象的属性
function increment() {state.count++;
}</script>
  1. 数据类型支持:
    1. ref() 可以用于基本数据类型(如字符串、数字、布尔值)以及复杂数据类型(如对象和数组)。当使用ref()包裹数据时,它会返回一个带有.value属性的对象,这个对象可以被Vue追踪变化。
    2. reactive() 主要用于复杂数据类型,如对象和数组。它直接返回一个响应式的代理对象,不需要通过.value访问。
  2. 访问数据:
    1. 使用ref()创建的数据,需要通过.value属性来访问或修改其内部值。在模板语法中,ref的值会被自动解包,所以不需要显式地使用.value。
    2. 使用reactive()创建的数据可以直接像普通JavaScript对象一样访问和修改
  3. 返回类型:
    1. ref() 返回的是一个特殊的RefImpl对象,这个对象有一个_value属性,实际上是一个由reactive()处理过的代理对象
    2. reactive() 直接返回一个由Proxy处理过的响应式代理对象
  4. 使用场景:
    1. ref() 更适合创建单个变量或需要在组件之间共享的响应式数据。
    2. reactive() 更适合创建包含多个属性的复杂数据结构,如状态管理中的store。
  5. 性能考量:
    1. ref() 在大量数据操作时可能会有性能上的优势,因为它只在实际访问或修改.value时才触发依赖收集和更新。
    2. reactive() 在处理复杂数据结构时可能更直观,但在某些情况下可能需要更多的内存,因为它创建了整个对象的响应式代理。

    小结

选择使用 ref 还是 reactive 取决于具体的应用场景和个人偏好:

  1.  简单的数据绑定和共享,ref是一个好选择(在定义数组时,建议使用ref,从而可避免reactive定义时值修改导致的响应式丢失问题);
  2.  而对于复杂的对象和状态管理,reactive可能更加合适

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

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

相关文章

品牌渠道管控力度的平衡艺术

渠道管控力度要如何把握呢&#xff1f;是不是管控越严格就一定越好&#xff1f;例如&#xff0c;发现一次低价就处以高额罚款&#xff0c;发现一次窜货也重罚&#xff0c;其实处罚是对低价管控较为直接的一种方式&#xff0c;但并非处罚越重就一定能取得良好的管控效果。 比如品…

Java 中的 switch 语句:类型支持与限制

Java 中的 switch 语句&#xff1a;类型支持与限制 1、switch 语句支持的数据类型2、switch 语句不支持的数据类型3、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在 Java 中&#xff0c;switch 语句是一种用于多分支选择的控制结构…

@SpringBootTest注解的用途是什么?

SpringBootTest注解是Spring Boot提供的一个用于测试的注解&#xff0c;主要用途是在测试过程中方便地创建一个应用上下文&#xff08;ApplicationContext&#xff09;。这个注解告诉Spring Boot去寻找一个主配置类&#xff08;比如带有SpringBootApplication的类&#xff09;&…

常见的负载均衡算法和实现方式

负载均衡的原理&#xff0c;并给出常见的负载均衡算法和实现方式 负载均衡是一种分布式系统设计策略&#xff0c;其目的是为了将用户请求分摊到多个服务器上&#xff0c;提高系统的可用性和响应速度。它通过动态地将工作负载分配给各个节点&#xff0c;避免单点过载并提升整体…

【编程范式】理解响应式编程(reactive programming)

文章目录 一、定义与特点二、核心概念三、应用场景四、优势与挑战五、总结 响应式编程&#xff08;Reactive Programming&#xff09;是一种面向数据流和变化传播的编程范式&#xff0c;其核心在于以非阻塞和异步的方式处理数据流&#xff0c;从而提高应用的响应性、可维护性和…

如何使用FreeFileSync:一款免费且专业的数据备份与文件同步软件

数据的重要性不言而喻&#xff0c;因此&#xff0c;定期做数据备份已经是每一个人的基本工作习惯了。 FreeFileSync 是一款强大专业且免费开源的 文件夹对比/同步/备份 软件工具。FreeFileSync通过比较其内容&#xff0c;日期或文件大小上的一个或多个文件夹&#xff0c;然后根…

android 图片轮播

在Android中&#xff0c;实现图片轮播&#xff08;也称为图片滑动或图片轮转&#xff09;通常涉及到使用ViewPager、RecyclerView配合PagerAdapter、RecyclerView.Adapter或者第三方库如Glide、Picasso来处理图片加载&#xff0c;以及一个定时器&#xff08;如Handler、Timer、…

统信UOS桌面操作系统上删除系统升级后GRUB中的回滚条目与备份

原文链接&#xff1a;统信UOS删除升级后GRUB中的回滚条目与备份 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于在统信UOS桌面操作系统上删除系统升级后GRUB中的回滚条目与备份的文章。在进行系统升级后&#xff0c;GRUB引导菜单中可能会出现多个回滚条目和备份…

深入解析C++中的特殊成员函数:构造函数、析构函数、拷贝构造函数与赋值操作符

深入解析C中的特殊成员函数&#xff1a;构造函数、析构函数、拷贝构造函数与赋值操作符 在C编程的浩瀚宇宙中&#xff0c;构造函数、析构函数、拷贝构造函数和赋值操作符是构成对象生命周期和行为的四大基石。它们各自扮演着不可或缺的角色&#xff0c;确保了对象从创建到销毁…

2024年华为OD机试真题-找座位-C++-OD统一考试(C卷D卷)

2024年OD统一考试(D卷)完整题库:华为OD机试2024年最新题库(Python、JAVA、C++合集) 题目描述: 在一个大型体育场内举办了一场大型活动,由于疫情防控的需要,要求每位观众的必须间隔至少一个空位才允许落座。现在给出一排观众座位分布图,座位中存在已落座的观众,请计…

nginx正向代理、反向代理、负载均衡

nginx.conf nginx首要处理静态页面 反向代理 动态请求 全局模块 work processes 1; 设置成服务器内核数的两倍&#xff08;一般不不超过8个超过8个反而会降低性能一般4个 1-2个也可以&#xff09; netstat -antp | grep 80 查端口号 *1、events块&#xff1a;* 配置影响ngi…

qt list 控件

Qt中的列表控件主要包括QListView和QListWidget。以下是对这两个控件的详细介绍&#xff1a; 一、QListView控件 创建&#xff1a;在Qt Designer中&#xff0c;可以通过拖拽的方式创建一个ListView控件。在代码中&#xff0c;可以使用QListView *listView new QListView(thi…

aws sap认证考试如何轻松通过

如何高效备考AWS SAP (Solutions Architect Professional) 认证? AWS SAP认证是AWS认证体系中难度最高的认证之一,要通过这个考试确实需要下一番功夫。但通过合理规划和有效准备,你可以提高通过的几率。以下是一些建议: 评估起点 首先诚实地评估自己的AWS知识水平和实践经验。…

气膜滑冰馆:滑冰爱好者的最佳选择—轻空间

滑冰运动在全球范围内越来越受欢迎&#xff0c;然而&#xff0c;传统滑冰馆在建设和运营过程中往往面临高能耗和环境控制难题。幸运的是&#xff0c;采用气膜结构作为建筑外壳的气膜滑冰馆&#xff0c;正在为滑冰爱好者提供一种全新的、节能的解决方案。 1. 气膜结构&#xff1…

Spring MVC -01

Spring 的 MVC 框架 Spring的MVC框架是Spring框架的一部分&#xff0c;它提供了用于开发Web应用程序的一组组件和设计模式。MVC是Model-View-Controller的缩写&#xff0c;是一种设计模式&#xff0c;用于将应用程序的逻辑与用户界面分离。 在Spring的MVC框架中&#xff0c;Mo…

独立站点:自主经营,不受平台限制的网站类型

独立站点&#xff0c;因自主运作且无需依附其他平台而得名&#xff0c;其内涵即为具备自有域名、自属服务器及内容的个体。相较于依赖第三方平台&#xff0c;独立站点能按自身需求进行经营&#xff0c;无任何限制。 然而&#xff0c;独立站并非涵盖所有网站类型。日常网络浏览…

MES 功能模块

MES系统&#xff08;Manufacturing Execution System&#xff0c;生产执行系统&#xff09;是制造业企业的关键管理系统之一&#xff0c;它通过集成生产计划、工艺流程、物料管理和生产过程数据等&#xff0c;实现了对生产和制造过程的全面管理和监控。MES系统的功能模块主要包…

小额贷记业务全解析与功能测试策略

一、小额贷记业务概述 小额贷记业务是小额支付系统的重要组成部分&#xff0c;它主要处理金额在规定起点以下的小额贷记支付业务。这种业务通常面向个人或小微企业&#xff0c;提供便捷、快速的资金划转服务。小额贷记业务的特点在于其金额较小、操作简便、处理速度快&#xff…

【线性表,线性表中的顺序表和链表】

目录 1、线性表的定义和基本操作1.1、线性表的定义1.2、线性表的基本操作 2、顺序表和链表的比较2.1、顺序表2.1.1、顺序表的定义和特点2.1.2、顺序表的实现&#xff08;1&#xff09;顺序表的静态分配&#xff1a;&#xff08;2&#xff09;顺序表的动态分配 2.1.3、顺序表的基…

昇思25天学习打卡营第17天|基于MobileNetv2的垃圾分类

今天学习的内容是利用视觉图像技术&#xff0c;来实现垃圾分类代码开发的方法。通过读取本地图像数据作为输入&#xff0c;对图像中的垃圾物体进行检测&#xff0c;并且将检测结果图片保存到文件中。 本章节主要包括8部分内容&#xff1a; 1、实验目的 1、了解熟悉垃圾分类应用…