Vue3 响应式数据

ref 基本数据类型响应式

  • 语法:let xxx = ref(初始值)
  • **返回值:**一个RefImpl的实例对象,简称ref对象refref对象的value属性是响应式的
  • 注意点:
    • TS中操作数据需要:xxx.value,但模板中不需要.value,直接使用即可。
    • 对于let name = ref('张三')来说,name不是响应式的,name.value是响应式的。
<script lang="ts" setup name="Person">
import {ref} from 'vue';// 数据 -- 此时不是响应式的
let name = ref('张三');
let age = ref(18);
let tel = '1234567890';// 方法 -- 这样修改页面没有变化
function changName() {name.value = '李四';
}
function changeAge() {age.value = 20;
}function showTel() {alert(tel);
}

reactive 对象类型的响应式数据

  • 作用:定义一个响应式对象(基本类型不要用它,要用ref,否则报错)
  • 语法:let 响应式对象= reactive(源对象)
  • **返回值:**一个Proxy的实例对象,简称:响应式对象。
  • 注意点:reactive定义的响应式数据是**“深层次”**的。
<template><div class="person"><h1>Person</h1><p>Name: {{ name }}</p><p>Age: {{ age }}</p><button @click="changName">修改名字</button><button @click="changeAge">修改年龄</button><button @click="showTel">查看联系方式</button><h1>一辆小汽车</h1><h3>品牌{{ car.brand }}</h3><h3>价格{{ car.price }}</h3><br><button @click="changeCarPrice">修改价格</button><br><h1>游戏列表</h1><ul><li v-for="game in games" :key="game.name"><p>游戏名称: {{ game.name }}</p><p>游戏价格: {{ game.price }}</p></li></ul><button @click="changeFisrtGamePrice">修改第一个游戏价格</button></div>
</template><!-- <script lang="ts">
export default {name: 'Person',// setup() {//     // 数据 -- 此时不是响应式的//     let name = '张三'; //     let age = 18;//     let tel = '1234567890';//     // 方法 -- 这样修改页面没有变化//     function changName() {//         name = '李四';//     }//     function changeAge() {//         age = 20;//     }//     function showTel() {//         alert(tel);//     }//     return {a:name, b:age, changName, changeAge, showTel}// }
} -->
<!-- </script> --><script lang="ts" setup name="Person">
import {ref} from 'vue';
import { reactive } from 'vue';// 数据 -- 此时不是响应式的
let name = ref('张三');
let age = ref(18);
let tel = '1234567890';let car = reactive({brand: 'BMW', price: 1000000});let games = reactive([{name: 'LOL', price: 100},{name: 'DNF', price: 200},{name: 'CF', price: 300},
]);// 方法 -- 这样修改页面没有变化
function changName() {name.value = '李四';
}
function changeAge() {age.value = 20;
}function showTel() {alert(tel);
}
function changeCarPrice() {car.price += 10000;
}
function changeFisrtGamePrice() {games[0].price += 100;
}
</script>
<style>
.person {background-color: aqua;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
</style>

ref 再探

  • ref接收的数据可以是:基本类型对象类型
  • ref接收的是对象类型,内部调用了reactive函数。
<template><div class="person"><h1>Person</h1><p>Name: {{ name }}</p><p>Age: {{ age }}</p><button @click="changName">修改名字</button><button @click="changeAge">修改年龄</button><button @click="showTel">查看联系方式</button><h1>一辆小汽车</h1><h3>品牌{{ car.brand }}</h3><h3>价格{{ car.price }}</h3><br><button @click="changeCarPrice">修改价格</button><br><h1>游戏列表</h1><ul><li v-for="game in games" :key="game.name"><p>游戏名称: {{ game.name }}</p><p>游戏价格: {{ game.price }}</p></li></ul><button @click="changeFisrtGamePrice">修改第一个游戏价格</button></div>
</template><!-- <script lang="ts">
export default {name: 'Person',// setup() {//     // 数据 -- 此时不是响应式的//     let name = '张三'; //     let age = 18;//     let tel = '1234567890';//     // 方法 -- 这样修改页面没有变化//     function changName() {//         name = '李四';//     }//     function changeAge() {//         age = 20;//     }//     function showTel() {//         alert(tel);//     }//     return {a:name, b:age, changName, changeAge, showTel}// }
} -->
<!-- </script> --><script lang="ts" setup name="Person">
import {ref} from 'vue';
import { reactive } from 'vue';// 数据 -- 此时不是响应式的
let name = ref('张三');
let age = ref(18);
let tel = '1234567890';let car = ref({brand: 'BMW', price: 1000000});let games = ref([{name: 'LOL', price: 100},{name: 'DNF', price: 200},{name: 'CF', price: 300},
]);// 方法 -- 这样修改页面没有变化
function changName() {name.value = '李四';
}
function changeAge() {age.value = 20;
}function showTel() {alert(tel);
}
function changeCarPrice() {car.value.price += 10000;
}
function changeFisrtGamePrice() {games.value[0].price += 100;
}
</script>
<style>
.person {background-color: aqua;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
</style>

宏观角度看:

  1. ref用来定义:基本类型数据对象类型数据

  2. reactive用来定义:对象类型数据

  • 区别:
  1. ref创建的变量必须使用.value(可以使用volar插件自动添加.value)。
  2. reactive重新分配一个新对象,会失去响应式(可以使用**Object.assign**去整体替换)。
// reactive 
Object.assign(car, {brand:'dklsajf', price:333});// ref
car.value = {brand:'3', price:3454};
  • 使用原则:
  1. 若需要一个基本类型的响应式数据,必须使用ref
  2. 若需要一个响应式对象,层级不深,refreactive都可以。
  3. 若需要一个响应式对象,且层级较深,推荐使用reactive

自动加value:

在这里插入图片描述

toRefs toRef

  • 作用:将一个响应式对象中的每一个属性,转换为**ref对象**。
  • 备注:toRefstoRef功能一致,但toRefs可以批量转换。
import {toRefs} from 'vue'
let person = {name:'glm',age:211
};
// 解构 toRefs
let {name, age} = toRefs(pesrson);// 解构 toRef
let age = toRef(person. 'age');

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

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

相关文章

第三届“讯方杯”大赛常见问题解答

9月20日&#xff0c;第三届“讯方杯”全国大学生信息技术应用及创新大赛正式拉开帷幕。自大赛报名启动以来&#xff0c;全国各大高校热烈响应、广泛参与。为了更好地服务于各参赛团队&#xff0c;大赛组委会针对收集到的各类常见问题&#xff0c;整理了热点问答集锦&#xff0c…

大型公共建筑用电管理集中监测平台功能介绍

在当国家对能源管理和环境保护日益重视的背景下&#xff0c;相关政策不断出台&#xff0c;推动企业用能向智能化管理、数字化管理方向转型。电能因为方便传输、易于转换、便于控制等特性&#xff0c;成为广大企事业单位生产、办公主要的能量来源。双碳背景下&#xff0c;由于电…

动态内存管理练习题的反汇编代码分析(底层)

目录 1.练习题回顾 2.反汇编代码 3.分析 lea指令的作用 1.给普通指针赋值 反汇编显示 2.给结构体指针赋值 反汇编显示 mov 指令的作用 1.取普通指针指向地址的值(等价为C语言的*) 反汇编显示 2.取结构体指针指向地址里的值 反汇编显示 3.总结->的作用 4.回到…

回归预测 | Matlab基于SABO-SVR减法平均算法优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于SABO-SVR减法平均算法优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于SABO-SVR减法平均算法优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab基于SABO-SVR减法平均算法优化…

Robust多模态模型的开发

本文所涉及所有资源均在 传知代码平台 可获取。 目录 Robust 多模态模型&#xff1a;寻找遗失的模态&#xff01; 一、研究背景 二、模型结构和代码 三、数据集介绍 六、性能展示 六、实现过程 七、运行过程 Robust 多模态模型&#xff1a;寻找遗失的模态&#xff01; 近年来&a…

最新项目全功能知识付费小程序源码系统 带完整的安装代码包以及搭建部署教程

系统概述 知识付费小程序源码系统是一款基于先进技术架构设计的综合性平台。它旨在为用户提供一站式的知识付费解决方案&#xff0c;涵盖了从内容创作到用户管理的各个环节。 该系统采用了现代化的开发理念和技术手段&#xff0c;确保了系统的稳定性、安全性和高效性。它具有…

ClickHouse 24.9 版本发布说明

本文字数&#xff1a;7295&#xff1b;估计阅读时间&#xff1a;19 分钟 作者&#xff1a;ClickHouse Team 本文在公众号【ClickHouseInc】首发 又到新版本发布的时间了&#xff01; 发布概要 本次ClickHouse 24.9 版本包含了23个新功能&#x1f381;、14项性能优化&#x1f6f…

Golang反射解说

在Go语言中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时检查、修改和操作变量的类型信息。 反射主要用于处理那些在编译时无法确定类型的情况&#xff0c;比如处理接口类型的值、实现通用的函数等。 Go语言中反射的基本…

邮件系统国产化改造: 保障信息安全、提升效率的最佳选择

在当前数字化转型的大背景下&#xff0c;我国政府提出了构建网络强国和数字强国的宏伟蓝图。这一战略的实施&#xff0c;不仅为数字政府的建设提供了坚实的基础&#xff0c;也为政府和企业的数字化升级指明了方向。在这一进程中&#xff0c;邮件系统的国产化改造就显得尤为重要…

Chromium 关闭 Google Chrome 后继续运行后台应用功能分析c++

此功能允许关闭 Google Chrome 后继续运行后台&#xff0c;控制此功能的开关是 // Set to true if background mode is enabled on this browser. //更改此值可以修改默认开启关闭 inline constexpr char kBackgroundModeEnabled[] "background_mode.enabled"; …

前端的全栈混合之路Meteor篇:分布式数据协议DDP深度剖析

本文属于进阶篇&#xff0c;并不是太适合新人阅读&#xff0c;但纯粹的学习还是可以的&#xff0c;因为后续会实现很多个ddp的版本用于web端、nodejs端、安卓端和ios端&#xff0c;提前预习和复习下。ddp协议是一个C/S架构的协议&#xff0c;但是客户端也同时可以是服务端。 什…

STM32F407寄存器操作(DMA+SPI)

1.前言 前面看B站中有些小伙伴吐槽F4的SPIDMA没有硬件可控的CS引脚&#xff0c;那么今天我就来攻破这个问题 我这边暂时没有SPI的从机芯片&#xff0c;并且接收的过程与发送的过程类似&#xff0c;所以这里我就以发送的过程为例了。 2.理论 手册上给出了如下的描述 我们关注…

Spring Boot 学习之路 -- Thymeleaf 模板引擎

前言 最近因为业务需要&#xff0c;被拉去研究后端的项目&#xff0c;代码框架基于 Spring Boot&#xff0c;后端对我来说完全小白&#xff0c;需要重新学习研究…出于个人习惯&#xff0c;会以 Blog 文章的方式做一些记录&#xff0c;文章内容基本来源于「 Spring Boot 从入门…

微信小程序-分包加载

一.分包的意义 小程序是由多个页面构成&#xff0c;为了因为代码量多&#xff0c;体积大导致用户打开速度变慢&#xff0c;小程序提供了分包加载数据。 分包加载数据&#xff0c;只有在主包调用分包某一个页面时候才会调用加载分包。即就是按需加载。 整个小程序不能超过20M&a…

golang grpc进阶

protobuf 官方文档 基本数据类型 .proto TypeNotesGo Typedoublefloat64floatfloat32int32使用变长编码&#xff0c;对于负值的效率很低&#xff0c;如果你的域有可能有负值&#xff0c;请使用sint64替代int32uint32使用变长编码uint32uint64使用变长编码uint64sint32使用变长…

滚柱导轨适配技巧与注意事项!

滚柱导轨是一种重要的传动元件&#xff0c;它由滚柱作为滚动体。用于连接机床的运动部件和床身基座&#xff0c;其设计旨在提供高承载能力和高刚度&#xff0c;适用于重型机床和精密仪器&#xff0c;而滚柱导轨的适配方法对于确保机械设备的高精度运行至关重要。 滚柱导轨的适配…

大数据分析案例-基于逻辑回归算法构建抑郁非抑郁推文识别模型

🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章 大数据分析案例合集

介绍Java

Java简介 Java是一门由Sun公司&#xff08;现被Oracle收购&#xff09;在1995年开发的计算机编程语言&#xff0c;其主力开发人员是James Gosling&#xff0c;被称为Java之父。Java在被命名为“Java”之前&#xff0c;实际上叫做Oak&#xff0c;这个名字源于James Gosling望向…

Unite Barcelona主题演讲回顾:深入了解 Unity 6

本周&#xff0c;来自世界各地的 Unity 开发者齐聚西班牙巴塞罗那&#xff0c;参加 Unite 2024。本次大会的主题演讲持续了一个多小时&#xff0c;涵盖新功能的介绍、开发者成功案例的分享&#xff0c;以及在编辑器中进行的技术演示&#xff0c;重点展示了 Unity 6 在实际项目中…

学习python自动化——pytest单元测试框架

一、什么是pytest 单元测试框架&#xff0c;unittest&#xff08;python自带的&#xff09;&#xff0c;pytest&#xff08;第三方库&#xff09;。 用于编写测试用例、收集用例、执行用例、生成测试结果文件&#xff08;html、xml&#xff09; 1.1、安装pytest pip instal…