常用知识碎片 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可能更加合适

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

git仓库使用

一、没有仓库 首先要有gitee账号 创建仓库 有了仓库就按已有仓库进行操作 二、已有仓库 先让仓库负责人把自己拉进仓库 成为开发者或者管理员 git clone 仓库地址 开始工作 git add . git commit -m “ 提交说明” git pull 更新一下也叫同步 将线上代码更新到本地 git pu…

BUUCTF[堆][unsortbin]

fastbin Attack 、unsorted bin 思路&#xff1a; 利用double free的方式泄漏出unsortbin中的main_arena地址。 释放一个不属于fast bin 的 chunk&#xff0c;并且该 chunk 不和 top chunk 紧邻时&#xff0c;该 chunk 会被首先放到 unsorted bin 中。 当有一个(或几个) sma…

BUCK电源芯片,电气参数,极限参数,工作特性,引脚功能

概述 在应用DC-DC开关电源芯片时&#xff0c;通常需要关注以下参数&#xff0c;同步与非同步&#xff0c;输入电压&#xff0c;输入电流&#xff0c;输出电压&#xff0c;输出电流&#xff0c;输入输出电容的选择&#xff1b;mosfet选型&#xff0c;电感选型&#xff0c;功耗&a…

Kodcloud可道云安装与一键发布上线实现远程访问详细教程

文章目录 1.前言2. Kodcloud网站搭建2.1. Kodcloud下载和安装2.2 Kodcloud网页测试 3. cpolar内网穿透的安装和注册4. 本地网页发布4.1 Cpolar云端设置4.2 Cpolar本地设置 5. 公网访问测试6.结语 1.前言 本文主要为大家介绍一款国人自研的在线Web文件管理器可道云&#xff0c;…

[Python学习篇] Python多线程

多线程 Python 多线程编程是一种在单个程序中同时执行多个线程的技术&#xff0c;主要用于提高程序的并发性和性能&#xff0c;尤其是在 I/O 操作频繁的场景下。Python 提供了 threading 模块来支持多线程编程。 基本概念 线程&#xff1a;线程是一个独立的执行流&#xff0c;可…

【SpringBoot Web框架实战教程】08 SpringBoot 自定义异常处理输出

不积跬步&#xff0c;无以至千里&#xff1b;不积小流&#xff0c;无以成江海。大家好&#xff0c;我是闲鹤&#xff0c;公众号&#xff1a;xxh_zone&#xff0c;十多年开发、架构经验&#xff0c;先后在华为、迅雷服役过&#xff0c;也在高校从事教学3年&#xff1b;目前已创业…

基于FPGA的数字信号处理(16)--定点数的舍入模式(7)6种舍入模式的总结

前言 在前面的6篇文章中&#xff0c;分别对6中舍入模式做了详细的介绍&#xff0c;本文在前文的基础上&#xff0c;再对这6种舍入模式做一个对比和总结。 6种舍入模式 在数据处理过程中&#xff0c;为了防止数据溢出而增加位宽是一种很常见的处理方式&#xff0c;但是随着算法链…

中国科学院地理所牛书丽团队《Global Change Biology 》最新成果!

本文首发于“生态学者”微信公众号&#xff01; 在全球气候变化的背景下&#xff0c;干旱地区的扩张对生态系统的氮循环产生了深远影响。氮同位素&#xff08;δ15N&#xff09;的天然丰度&#xff0c;尤其是土壤中的δ15N&#xff0c;是评估陆地生态系统氮循环动态和氮限制的关…

固定资产定位追踪管理系统

固定资产定位跟踪管理系统是一个利用技术手段对公司资产进行定位、跟踪和管理的系统。它帮助企业实时了解资产的位置、情况和使用情况&#xff0c;提高固定资产管理的效率和准确性。以下是该系统的主要功能和优势&#xff1a;  固定资产识别和识别&#xff1a;系统通过使用识…

springboot大学校园二手书交易APP-计算机毕业设计源码25753

摘 要 在数字化与移动互联网迅猛发展的今天&#xff0c;人们对于图书的需求与消费方式也在悄然改变。为了满足广大读者对图书的热爱与追求&#xff0c;我们倾力打造了一款基于Android平台的图书交易APP。这款APP不仅汇聚了海量的图书资源&#xff0c;提供了便捷的交易平台&…

边缘计算盒子_B100_Jetson Nano (aarch64)开发环境搭建

目录 一、刷机步骤1、搭建刷机环境2、进入刷机模式3、开始刷机 二、系统迁移到TF卡 或者 U盘1、迁移脚本2、提前插入U盘或者TF卡3、 开始迁移 三、搭建miniconda 环境1、下载安装 四、jetpack开发套件环境1、版本查看2、apt 更换国内源3、安装Jetson-stats管理工具 一、刷机步骤…

图纸文档管理新篇章:陕西航沣与三品软件合作 优化研发流程

近日&#xff0c;陕西航沣新材料有限公司与三品软件正式达成合作协议&#xff0c;共同打造高效、智能的图纸文档管理平台。此次合作旨在赋能陕西航沣在高性能碳纤维增强纸基摩擦材料领域的创新与发展&#xff0c;提升企业的核心竞争力。 客户简介 陕西航沣新材料有限公司&…

【通过pnpm创建vite项目】

vue3最新项目技术构建后台管理系统 一、技术要求二、安装pnpm2.1 构建vite三、项目配置3.1 eslint 配置3.2 prettier配置3.3 stylelint配置3.4 配置husky3.5 配置commitlint3.6 pnpm 强制安装四、Element-plus 引入4.1 完整引入4.2 国际化配置4.3 配置别名4.4 Env环境配置4.5 s…

【2024_CUMCM】数据预处理、数据分析、数据可视化

目录 2023-c题-问题1 问题分析 偏度 峰度 箱线图 读图 重采样、降采样、升采样 重采样 降采样 升采样 解题代码 2023-c题-问题1 问题分析 问题说白了就是探究品类和销售量这两个数据他们各自内在联系&#xff0c;根据题意&#xff0c;我们先进行数 据预处理&#…

机器视觉:(1) 初识Roboflow(使用详解一)获取数据集(最新)

一&#xff1a;访问地址 [1] Roboflow官网&#xff1a;官网地址 [2]YOLOv8 项目地址github源码地址 [3]YOLOv8 官方教程官网教程地址 二&#xff1a;获取数据集步骤 1.访问官网地址&#xff1a;进入首页面&#xff0c;点击登录 2.注册过程省略了&#xff0c;按步骤走就可以…

01. 课程简介

1. 课程简介 本课程的核心内容可以分为三个部分&#xff0c;分别是需要理解记忆的计算机底层基础&#xff0c;后端通用组件以及需要不断编码练习的数据结构和算法。 计算机底层基础可以包含计算机网络、操作系统、编译原理、计算机组成原理&#xff0c;后两者在面试中出现的频…

【MySQL】mysqldumpslow工具 -- 总结慢查询日志文件

1. 作用 在平时使用MySQL数据库时&#xff0c;经常进行查询操作&#xff0c;有些查询语句执行的时间非常长&#xff0c;当执行时间超过设定的阈值时&#xff0c;我们称这个查询为慢查询&#xff0c;慢查询的相关信息通常需要用日志记录下来称为慢查询日志&#xff0c;mysqldum…

下载设计免抠元素,就上这6个网站,免费下载!

寻找免费PNG免抠素材网站是创意设计者们探索的重要一环。这些网站提供了丰富的PNG格式素材&#xff0c;去除了背景&#xff0c;方便在不同项目中使用。精心挑选了6个免费PNG免抠素材网站&#xff0c;它们提供了高品质的素材资源&#xff0c;无论是个人设计还是商业项目&#xf…

OpenCV漫水填充函数floodFill函数的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 功能描述 ffloodFill函数是OpenCV库中用于图像处理的一个功能&#xff0c;它用于填充与种子点颜色相近的连通区域。这个函数在很多场景下都非常有用&#x…

AutoHotKey自动热键(七)WINDOWS按键映射与鼠标映射(替换/组合)

该脚本支持简单的按键替换,可以针对某个窗口进行按键替换,还可以对鼠标和键盘进行互相替换,也可以用来禁用一些按键 键盘按键映射 普通按键映射 a::b这样子就直接在全局把所有的a键输入都映射成b键输出 上面这一行在执行过程中相当于拆解成下面两个,第一个是按下,第二个是弹…