Vue3:响应式数据的基本使用(ref、reactive)

embedded/2024/9/22 20:57:13/

一、前言

  • 在Vue3中,如果数据不是响应式数据,当数据的值发生改变时,页面上的数据是不会发生改变的。
  • 因此本文主要介绍Vue3中响应式数据的使用,包括refreactive的基本使用。

ref_4">二、ref

ref___5">1、ref —— 创建基本类型的响应式数据
  • ref 可以定义基本类型的响应式变量
  • 语法 :
let xxx=ref(初始值)
  • 返回值:
    是一个RefImpl的实例对象,简称ref对象或refref对象中的value属性是响应式的。
  • 其他:
    在JS中操作数据需要使用 "xxx.value"的形式,但在模板中不需要用. value,直接使用即可。
ref_16">(1)引入ref
import {ref} from ' vue '
(2)代码
  • 代码解析

在这里插入图片描述

  • 完整代码
<template><p>个人信息:</p><p>性别:{{ gender }}</p><p>年龄:{{ age }}</p><button @click="ageChange">点击年龄加1</button>
</template><script setup>
import { ref } from "vue";// 数据
let gender = ref("女");
let age = ref(25);// 方法
function ageChange() {age.value += 1;
}
</script>

在这里插入图片描述

ref___55">2、ref —— 创建对象类型的响应式数据

ref也可以创建对象类型的响应式数据

(1)代码解析
  • ref可以定义以下类型的数据:

在这里插入图片描述

  • 修改ref的数据时记得.value的使用以及使用顺序:
    在这里插入图片描述

  • 在模板中,不需要使用.value

在这里插入图片描述

(2)完整代码
<template><p>小明的年龄是:{{ info.age }}</p><p>小明的身高是:{{ info.height }} cm</p><button @click="ageChange">点击年龄加1</button><button @click="heightChange">点击身高加1</button><br /><h2>星座列表:</h2><ul><li v-for="item in Constellation" :key="item.id">{{ item.star }}</li></ul><button @click="ConstellationChange">点击修改第二个星座名称</button>
</template><script setup>
import { ref } from "vue";// 数据
let info = ref({age: 20,height: 165,
});
let Constellation = ref([{ id: 1, star: "双子座" },{ id: 2, star: "狮子座" },{ id: 3, star: "巨蟹座" },
]);// 方法
function ageChange() {info.value.age += 1;
}
function heightChange() {info.value.height += 1;
}
function ConstellationChange() {Constellation.value[1].star = "处女座";
}
</script>  

reactive_115">三、reactive

1、概念

reactive只能定义对象类型的响应式数据,例如:

  • 数据1:
let info = reactive({age: 20,height: 165,
});
  • 数据2:
let Constellation = reactive([{ id: 1, star: "双子座" },{ id: 2, star: "狮子座" },{ id: 3, star: "巨蟹座" },
]);
  • 而以下代码是错误的(reactive不能定义基本类型的数据):
let name=reactive("张三")
2、代码
<template><p>小明的年龄是:{{ info.age }}</p><p>小明的身高是:{{ info.height }} cm</p><button @click="ageChange">点击年龄加1</button><button @click="heightChange">点击身高加1</button><br /><h2>星座列表:</h2><ul><li v-for="item in Constellation" :key="item.id">{{ item.star }}</li></ul>
</template><script setup>
import { reactive } from "vue";// 数据
let info = reactive({age: 20,height: 165,
});
let Constellation = reactive([{ id: 1, star: "双子座" },{ id: 2, star: "狮子座" },{ id: 3, star: "巨蟹座" },
]);// 方法
function ageChange() {info.age += 1;
}
function heightChange() {info.height += 1;
}
</script>

在这里插入图片描述

3、注意事项
  • reactive重新分配一个新对象, 会失去响应式;可以使用object . assign去整体替换,举例:

原本有数据如下:

// 数据
let info = reactive({age: 20,height: 165,
});

点击按钮对整体数据进行修改:

function infoChange() {info={age: 30,height: 185,
}
}

但是这样修改数据之后,点击按钮数据并不会修改:
在这里插入图片描述

而使用object . assign可以让页面的数据进行更新:

function infoChange() {Object.assign(info, {age: 30,height: 185,});
}

在这里插入图片描述
结果如下:
在这里插入图片描述

四、总结

  • ref可以定义基本类型数据、对象类型数据;reactive只能定义对象类型数据
  • 若需要一个响应式对象,层级不深refreactive 都可以
  • 若需要一个响应式对象,且层级较深,推荐使用reactive

http://www.ppmy.cn/embedded/11726.html

相关文章

汽车研发项目进度管理的挑战与优化策略

随着汽车行业的快速发展和市场竞争的加剧&#xff0c;新车型研发项目的进度管理成为车企赢得市场的关键。然而&#xff0c;由于汽车研发项目通常具有投资大、周期长、技术难度高、参与方众多等特点&#xff0c;项目进度管理面临着诸多挑战。为了提升车型研发效率、缩短研发周期…

Datawhale ChatGPT基础科普

根据课程GitHub - datawhalechina/hugging-llm: HuggingLLM, Hugging Future. 摘写自己不懂得一些地方&#xff0c;具体可以再到以上项目地址 LM&#xff1a;这是ChatGPT的基石的基石。 Transformer&#xff1a;这是ChatGPT的基石&#xff0c;准确来说它的一部分是基石。 G…

【数据结构】红黑树

目录 一、红黑树 1.1 基本概念 1.2 红黑树与AVL树的比较 二、结构和操作 2.1 节点定义 2.2 节点的插入操作 2.3 红黑树的迭代器 2.4 红黑树的模拟实现 三、set、 map的模拟实现 一、红黑树 1.1 基本概念 红黑树是一种二叉搜索树&#xff0c;但在每个结点上增加一个存…

java 学习一

jdk下载地址 配置环境变量

《剑指 Offer》专项突破版 - 面试题 113、114 和 115 : 详解拓扑排序(C++ 实现)

目录 前言 面试题 113 : 课程顺序 面试题 114 : 外星文字典 面试题 115 : 重建序列 前言 拓扑排序是指对一个有向无环图的节点进行排序之后得到的序列。如果存在一条从节点 A 指向节点 B 的边&#xff0c;那么在拓扑排序的序列中节点 A 出现在节点 B 的前面。一个有向无环…

OpenHarmony UI动画-lottie

简介 lottie是一个适用于OpenHarmony的动画库&#xff0c;它可以解析Adobe After Effects软件通过Bodymovin插件导出的json格式的动画&#xff0c;并在移动设备上进行本地渲染。 下载安裝 ohpm install ohos/lottieOpenHarmony ohpm 环境配置等更多内容&#xff0c;请参考如何…

算法训练营day21

一、二叉搜索树的最小绝对差 参考链接530. 二叉搜索树的最小绝对差 - 力扣&#xff08;LeetCode&#xff09; 利用二叉搜索树的性质 中序遍历 获取递增序列&#xff0c;还可以解决其他问题 173. 二叉搜索树迭代器 - 力扣&#xff08;LeetCode&#xff09; 530. 二叉搜索树的…

TensorRT从了入门到了解(官方文档)-学习笔记

继续研究如何使用TensorRT 本篇主要阅读TensorRT官方文档 目录 0.简介1.The C++ API1.1 The Build Phase 构建阶段1.1.1 Creating a Network Definition 创建网络定义1.1.2 Importing a Model Using the ONNX Parser 使用ONNX解析器导入模型1.1.3 Building an Engine1.2 Deseri…