Vue 3中ref和reactive的区别

news2024/12/26 14:52:16

在这里插入图片描述

🤍 前端开发工程师、技术日更博主、已过CET6
🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1
🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》
🍚 蓝桥云课签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

文章目录

    • 摘要:
    • 引言:
    • 正文:
      • 1️⃣ ref
      • 2️⃣ reactive
      • 3️⃣ ref与reactive对比
    • 总结:
    • 参考资料:

摘要:

本文将详细介绍Vue 3中ref和reactive的区别,探讨它们的使用场景和优缺点。

引言:

在Vue 3中,响应式系统是其核心特性之一。Vue 3提供了两种方法来实现响应式数据:ref和reactive。本文将对比分析这两种方法,帮助大家更好地理解它们的特点和适用场景。

正文:

1️⃣ ref

  • 定义:ref用于创建一个响应式的数据对象。它通常用于创建基本数据类型的响应式数据。
  • 使用方法:通过调用ref函数并传入一个初始值来创建一个响应式数据对象。在模板中访问时,ref对象会自动解构,无需通过.value属性访问。
  • 特点:ref对象在模板中自动解构,方便使用;同时,ref也可以用于创建复杂对象的响应式数据。

以下是一些简单的 ref 代码案例:

  1. 创建一个 ref:
const count = ref(0);
  1. 通过 ref 访问 DOM 元素:
const input = ref(null);
console.log(input.value); // 输出:null
  1. 在模板中使用 ref:
<template>
  <div>
    <input ref="input" v-model="count" />
    <button @click="handleClick">Click me</button>
  </div>
</template>

<script>
export default {
  setup() {
    const count = ref(0);

    function handleClick() {
      console.log(count.value); // 输出:1
    }

    return {
      count,
      handleClick,
    };
  },
};
</script>
  1. 在生命周期钩子中使用 ref:
import { ref, onMounted } from 'vue';

export default {
  setup() {
    const count = ref(0);

    function handleClick() {
      count.value++;
    }

    onMounted(() => {
      console.log(count.value); // 输出:0
    });

    return {
      count,
      handleClick,
    };
  },
};

这些案例展示了 ref 在 Vue.js 中的基本用法。ref 是 Vue.js 3.x 中一个新的响应式系统,它允许我们更灵活地操作 DOM 和管理状态。

2️⃣ reactive

  • 定义:reactive用于创建一个响应式的对象。它通常用于创建复杂对象的响应式数据。
  • 使用方法:通过调用reactive函数并传入一个对象来创建一个响应式数据对象。在模板中访问时,需要通过对象属性访问。
  • 特点:reactive适用于创建复杂对象的响应式数据;同时,reactive对象在模板中不会自动解构,需要通过对象属性访问。

以下是一些简单的 reactive 代码案例:

  1. 创建一个 reactive 对象:
const state = reactive({
  count: 0,
  message: 'Hello, Vue!'
});
  1. 修改 reactive 对象:
state.count++; // 自动触发视图更新
state.message = 'Hello, reactive!'; // 自动触发视图更新
  1. 在模板中使用 reactive 对象:
<template>
  <div>
    <p>Count: {{ state.count }}</p>
    <p>Message: {{ state.message }}</p>
    <button @click="handleClick">Click me</button>
  </div>
</template>

<script>
export default {
  setup() {
    const state = reactive({
      count: 0,
      message: 'Hello, Vue!'
    });

    function handleClick() {
      state.count++;
      state.message = 'Hello, reactive!';
    }

    return {
      state,
      handleClick
    };
  },
};
</script>
  1. 在生命周期钩子中使用 reactive 对象:
import { reactive, onMounted } from 'vue';

export default {
  setup() {
    const state = reactive({
      count: 0,
      message: 'Hello, Vue!'
    });

    function handleClick() {
      state.count++;
      state.message = 'Hello, reactive!';
    }

    onMounted(() => {
      console.log(state.count); // 输出:0
      console.log(state.message); // 输出:Hello, Vue!
    });

    return {
      state,
      handleClick
    };
  },
};

这些案例展示了 reactive 在 Vue.js 中的基本用法。reactive 是 Vue.js 3.x 中一个新的响应式系统,它允许我们更灵活地操作 DOM 和管理状态。

3️⃣ ref与reactive对比

  • 使用场景:ref适用于创建基本数据类型和复杂对象的响应式数据;reactive适用于创建复杂对象的响应式数据。
  • 自动解构:ref在模板中自动解构,方便使用;reactive不会自动解构,需要通过对象属性访问。
  • 适用性:ref可以用于创建基本数据类型和复杂对象的响应式数据,更加灵活;reactive适用于创建复杂对象的响应式数据,更加专注。

以下是 ref 和 reactive 的对比表格:

特性refreactive
定义用于创建一个响应式的数据对象,通常用于基本数据类型用于创建一个响应式的对象,通常用于复杂对象
使用方法调用ref函数并传入初始值调用reactive函数并传入对象
模板访问自动解构,无需.value不自动解构,需通过对象属性访问
适用场景基本数据类型和复杂对象复杂对象
自动解构在模板中自动解构不自动解构
适用性灵活,可用于多种数据类型专注,适用于复杂对象
用途创建基本数据类型的响应式数据,或作为复杂对象属性的响应式代理创建整个复杂对象的响应式数据

从表格中可以看出,ref 和 reactive 都有各自的优缺点。在实际项目中,可以根据具体需求和团队技术栈选择合适的方案。

总结:

ref和reactive是Vue 3中实现响应式数据的两种方法,各有优缺点。了解它们的区别,有助于我们在实际项目中根据需求选择合适的方法。

参考资料:

  • Vue Team. The Introduction to Vue 3[EB/OL]. https://v3.vuejs.org/guide/reactivity.html#ref-and-reactive.

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

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

相关文章

01使用调试工具

文章目录 前言一、用openocd打开单片机二、利用4444端口向单片机写入hex文件三、利用3333端口和gdb进行调试四、之前我出的问题总结 前言 之前写了一篇关于在linux下搭建stm32标准库的文章后&#xff0c;有一些小伙伴们还是出现了一些奇奇怪怪的错误&#xff0c;这一篇文章就是…

Netty服务端基本启动流程源码刨析

前言: 希望看这篇文章之前对Java Nio编程比较熟悉&#xff0c;并有用过Netty开发简单代码 服务端代码 先大致说一下NioEventLoopGroup组件的作用&#xff0c;可以把它看是作内部维护了一个NioEventLoop数组的对象&#xff0c;它的构造方法的参数用来指定维护数组的大小。NioEve…

JVM(六)——内存模型与高效并发

内存模型与高效并发 一、java 内存模型 【java 内存模型】是 Java Memory Model&#xff08;JMM&#xff09; 简单的说&#xff0c;JMM 定义了一套在多线程读写共享数据时&#xff08;成员变量、数组&#xff09;时&#xff0c;对数据的可见性、有序 性、和原子性的规则和保障…

2024年【G2电站锅炉司炉】考试及G2电站锅炉司炉找解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 G2电站锅炉司炉考试考前必练&#xff01;安全生产模拟考试一点通每个月更新G2电站锅炉司炉找解析题目及答案&#xff01;多做几遍&#xff0c;其实通过G2电站锅炉司炉复审模拟考试很简单。 1、【多选题】下列为锅炉的…

【MATLAB源码-第170期】基于matlab的BP神经网络股票价格预测GUI界面附带详细文档说明。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 基于BP神经网络的股票价格预测是一种利用人工神经网络中的反向传播&#xff08;Backpropagation&#xff0c;简称BP&#xff09;算法来预测股票市场价格变化的技术。这种方法通过模拟人脑的处理方式&#xff0c;尝试捕捉股票…

Echarts 基础柱状图,实现柱体设定颜色且带有图例

摘要&#xff1a;柱状图的最初要求很简单&#xff0c;4个柱体高低显示不同分类的值&#xff0c;逐渐增加的要求有&#xff1a;自定义特定分类颜色、增加图例展示、点击图例控制分类显示和隐藏。记录下遇到的问题和一些不熟悉的属性的使用。 大致的显示结果如上图&#xff0c;下…

CSMM软件过程能力成熟度模型

软件过程能力成熟度模型旨在通过提升组织的软件开发能力帮助顾客提升软件的业务价值。 本模型借鉴吸收了软件工程、项目管理、产品管理、组织治理、质量管理、卓越绩效管理、精益软件开发等领域的优秀实践&#xff0c;为组织提供改进和评估软件过程能力的一个成熟度模型。 总体…

55.跳跃问题

这个Java代码定义了一个名为Solution的类&#xff0c;并实现了一个名为canJump的方法。该方法用于判断一个给定整数数组&#xff08;表示每个位置可以跳跃的最大长度&#xff09;中&#xff0c;是否可以从数组的第一个位置跳到最后一个位置。 // 定义一个名为Solution的类 cla…

Docker搭建LNMP环境实战(04):安装VMwareTools共享文件夹

1、加载VMware Tools安装盘 在VMware客户端&#xff0c;点击主菜单&#xff1a; 图1 启动VMware Tools安装 再点击下面的菜单&#xff1a; 图2 打开设置界面 出现下面的界面&#xff0c;虚拟DVD加载的是linux.iso 图3 查看VMware Tools的DVD虚拟安装映像文件 将DVD加载到CentO…

【小黑送书—第十五期】>>一本书掌握数字化运维方法,构建数字化运维体系(文末送书)

字化转型已经成为大势所趋&#xff0c;各行各业正朝着数字化方向转型&#xff0c;利用数字化转型方法论和前沿科学技术实现降本、提质、增效&#xff0c;从而提升竞争力。 数字化转型是一项长期工作&#xff0c;包含的要素非常丰富&#xff0c;如数字化转型顶层设计、组织架构…

linux下关闭swap文件系统

临时关闭&#xff08;马上生效&#xff09; 永久关闭&#xff08;重启计算机才能生效&#xff09; vim /etc/fstab

搜维尔科技【应急推演】虚拟仿真技术的发展为煤炭矿井的安全生产找到新的出口

煤炭矿井的安全生产一直是我国关注的重大事项&#xff0c;保证煤炭矿井的安全生产&#xff0c;减少人员伤亡等不可逆的损失成为重中之重。虚拟仿真技术的发展为煤炭矿井的安全生产找到了新的出口。依托虚拟仿真技术&#xff0c;对煤炭矿井进行实时的生产监测&#xff0c;对矿井…

【项目管理——时间管理】【自用笔记】

1 项目时间管理&#xff08;进度管理&#xff09;概述 过程&#xff1a;&#xff08;2—6&#xff09;为规划过程组&#xff0c;7为监控过程组 题目定义&#xff1a;项目时间管理又称为进度管理&#xff0c;是指确保项目按时完成所需的过程。目标&#xff1a;时间管理的主要目标…

【python地图添加指北针和比例尺】

文章目录 1、前言2、代码2.1、指北针2.2、比例尺 3、结果 1、前言 地理信息绘制中添加指北针和比例尺&#xff0c;使得图像更专业。 2、代码 2.1、指北针 def add_north(ax, labelsize18, loc_x0.95, loc_y0.99, width0.06, height0.09, pad0.14):"""画一个…

记录些LLM相关的知识

MMR MMR&#xff08;Maximum Marginal Relevance&#xff09;最大边际相关性是一种用于信息检索和推荐系统的算法&#xff0c;它的目的是在推荐项目时平衡相关性和多样性。MMR算法旨在找出与用户查询最相关的同时又足够多样化的项目集合。 在信息检索领域&#xff0c;MMR算法通…

【Pt】马灯贴图绘制过程 02-制作锈迹

目录 一、边缘磨损效果 二、刮痕效果 三、边缘磨损与刮痕的混合 四、锈迹效果 本篇效果&#xff1a; 一、边缘磨损效果 将智能材质“Iron Forge Old” 拖入图层 打开“Iron Forge Old” 文件夹&#xff0c;选中“Sharpen”&#xff08;锐化&#xff09;&#xff0c;增大“…

Cesium自定义Shader实现流动尾线

目录 项目地址实现效果核心代码 项目地址 https://github.com/zhengjie9510/webgis-demo 实现效果 核心代码 class SpriteLineMaterialProperty {constructor(options) {this._definitionChanged new Cesium.Event();this._speed undefinedthis._color undefinedthis.spe…

考研数学|《660题》这样刷最有效!

考研数学660题作为许多考研学子在备考过程中重要的复习资料之一&#xff0c;自然也有很多同学会有660该怎么刷的问题。为了更有效率地使用这些题目&#xff0c;希望以下策略能帮到大家&#xff0c; 首先&#xff0c;你需要根据自己的实际情况&#xff0c;制定一个合理的学习计…

Leetcode70. 爬楼梯(动态规划)

Leetcode原题 Leetcode70. 爬楼梯 标签 记忆化搜索 | 数学 | 动态规划 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f;示例 1&#xff1a;输入&#xff1a;n 2 输出&#xff1a;2 解…

2024/03/27(C++·day3)

一、思维导图 二、完成下面类 代码 #include <cstring> #include <iostream>using namespace std;class myString { private:char *str; // 记录C风格的字符串int size; // 记录字符串的实际长度public:// 无参构造函数myString() : size(10){str new char[si…