【Vue3】学习watch监视:深入了解Vue3响应式系统的核心功能(下)

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢迎在文章下方留下你的评论和反馈。我期待着与你分享知识、互相学习和建立一个积极的社区。谢谢你的光临,让我们一起踏上这个知识之旅!
请添加图片描述

文章目录

  • 🍋情况三:监视【reactive】定义的对象类型数据
  • 🍋情况四:监视【ref或reactive】定义的对象类型数据中的某个属性
  • 🍋情况五:监视上述的多个数据
  • 🍋总结

🍋情况三:监视【reactive】定义的对象类型数据

准备代码如下

<template><div class="person"><h2>姓名:{{ person.name }}</h2><h2>年龄:{{ person.age }}</h2><button @click="changeName">修改名字</button><button @click="changeAge">修改年龄</button><button @click="changePerson">修改人</button>
</div></template><script lang="ts" setup name="Person11">import {reactive,watch} from 'vue'let person = reactive({name:"馒头",age:22})function changeName(){person.name += '*' }function changeAge(){person.age += 1}function changePerson(){person = {name:'小馒头',age:23}}</script><style scoped>.person {background-color: skyblue;box-shadow: 0 0 10px;border-radius: 10px;padding: 20px;}button {margin: 0 5px;}</style>

对于之前的ref,我们清楚的知道它可以对整体对象进行修改,也就是上一节的情况二,但是对于reactive来说,并不可以对整体就行修改,那如果我们想要就行整体修改的话,需要做点小修改

  function changePerson(){Object.assign(person,{name:'小馒头',age:23}) }

这样相当于默认开启深度监视(不能使用deep关掉),接下来我们将监视代码写上

watch(person,(newValue,oldValue)=>{console.log(newValue,oldValue)})

在这里插入图片描述
这样就可以了

🍋情况四:监视【ref或reactive】定义的对象类型数据中的某个属性

  1. 若该属性值不是【对象类型】,需要写成函数形式。
  2. 若该属性值是依然是【对象类型】,可直接编,也可写成函数,建议写成函数。

结论:监视的要是对象里的属性,那么最好写函数式
注意点:若是对象监视的是地址值,需要关注对象内部,需要手动开启深度监视。

准备代码如下

<template><div class="person"><h2>姓名:{{ person.name }}</h2><h2>年龄:{{ person.age }}</h2><h2>爱好:{{ person.hobby.h1 }}、{{ person.hobby.h2 }}</h2><button @click="changeName">修改名字</button><button @click="changeAge">修改年龄</button><button @click="changeH1">修改第一个爱好</button><button @click="changeH2">修改第二个爱好</button><button @click="changeHobby">修改整个爱好</button>
</div></template><script lang="ts" setup name="Person11">import {reactive,watch} from 'vue'let person = reactive({name:'馒头',age:22,hobby:{h1:'游泳',h2:'篮球'}})function changeName(){person.name += '~'}function changeAge(){person.age += 1}function changeH1(){person.hobby.h1 = '足球'}function changeH2(){person.hobby.h2 = '羽毛球'}function changeHobby(){person.hobby = {h1:'乒乓球',h2:'跳绳'}}</script><style scoped>.person {background-color: skyblue;box-shadow: 0 0 10px;border-radius: 10px;padding: 20px;}button {margin: 0 5px;}</style>

我们先来运行一下界面
请添加图片描述
如果我们想要监控全部

    watch(person,(newValue,oldValue)=>{console.log(newValue,oldValue)})

如果我们想要监视某一个属性可以直接(.)属性么。我们来试试看

watch(person.name,(newValue,oldValue)=>{console.log(newValue,oldValue)})

结果显然是不可以的
在这里插入图片描述
那我们如何修改呢,需要加一个getter函数,所谓getter函数就是能返回一个值的函数

watch(()=>{return person.name},(newValue,oldValue)=>{console.log(newValue,oldValue)})

这样修改的监视就可以满足对某属性的监视了


如果我们想要监视对象的话,下面的代码就可以解决,但是当我们点击修改对象整体,确不监视了

   watch(()=>person.hobby,(newValue,oldValue)=>{console.log('person.car变化了',newValue,oldValue)})

这时候我们需要加点东西,也就是我们之前说过的deep配置

   watch(()=>person.hobby,(newValue,oldValue)=>{console.log('person.car变化了',newValue,oldValue)},{deep:true})

这样我们就可以全部监视了
在这里插入图片描述
注意:监视响应式对象中的某个属性,且该属性是对象类型的,可以直接写,也能写函数,更推荐写函数

🍋情况五:监视上述的多个数据

写法如下,将想要监视的对象或者属性包裹在[ ]中即可

  watch([()=>person.name,person.hobby],(newValue,oldValue)=>{console.log(newValue,oldValue)},{deep:true})

🍋总结

本节将剩下的监视情况全数介绍了,如果有感兴趣的请参考官方文档watch

请添加图片描述

挑战与创造都是很痛苦的,但是很充实。

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

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

相关文章

openGauss学习笔记-228 openGauss性能调优-系统调优-LLVM使用建议

文章目录 openGauss学习笔记-228 openGauss性能调优-系统调优-LLVM使用建议 openGauss学习笔记-228 openGauss性能调优-系统调优-LLVM使用建议 目前LLVM在数据库内核侧已默认打开&#xff0c;用户可结合上述的分析进行配置&#xff0c;总体建议如下&#xff1a; 设置合理的wor…

【论文精读】OS-Copilot: Towards Generalist Computer Agents with Self-Improvement

OS-Copilot: Towards Generalist Computer Agents with Self-Improvement 前言ABSTRACT1 INTRODUCTION2 THE OS-COPILOT FRAMEWORK2.1 PLANNER2.2 CONFIGURATOR2.2.1 DECLARATIVE MEMORY2.2.2 PROCEDURAL MEMORY2.2.3 WORKING MEMORY 2.3 ACTOR 3 THE FRIDAY AGENT3.1 A RUNNIN…

深入探索 JS 的提升机制、函数与块作用域以及函数表达式和声明(上)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

《高考》期刊杂志投稿邮箱知网教育类期刊发表

《高考》杂志是由国家新闻出版总署批准的正规教育类期刊。主要宣传高中新课程改革的专业性&#xff0c;是教育管理工作者、高中一线教师交流经验、探讨问题的重要平台&#xff0c;期刊突出政策性、针对性、指导性&#xff0c;是一本以教育科研成果展示为主&#xff0c;兼具教育…

Sora 提示词每日分享 | 中英文对照

每日分享一个 sora 创意视频提示词之《冲浪者在历史大厅的巨浪中展现技艺》 sora提示词视频 prompt: In an ornate, historical hall, a massive tidal wave peaks and begins to crash. Two surfers, seizing the moment, skillfully navigate the face of the wave. 提示词…

变革中的容器技术

容器化技术的优点 容器化是一种将应用程序和其所需的依赖项&#xff0c;封装在一个可在任何基础架构上一致运行的轻量级可执行文件&#xff08;即容器&#xff09;的技术。容器化技术可以大大简化应用程序的部署、管理和维护&#xff0c;提高运维效率和可靠性。 容器化技术有…

如何实现多账户管理?海外代理IP推荐

伴随着互联网的发展&#xff0c;目前越来越多的用户开始拥有不止一个社交媒体或者电商平台等类型的账号&#xff0c;但实际上不论是社交平台还是电商平台对于用户的多账号使用行为都十分的抵制。如果用户不采取任何措施直接长时间进行多账户操作的话&#xff0c;可能会遇到以下…

有那种试卷还原软件吗?分享3款一键还原空白的工具!

在数字化学习的浪潮中&#xff0c;试卷还原软件作为一种新型的学习工具&#xff0c;正逐渐受到广大学生和教育工作者的青睐。这类软件不仅能够帮助我们快速整理、分析试卷&#xff0c;还能通过智能识别技术&#xff0c;将纸质试卷转化为电子文档&#xff0c;极大地提高了学习效…

微信小程序简单输入框布局(合并忘记密码和修改页面)

微信小程序简单入门级输入框布局&#xff0c;将忘记密码和修改页面合并到一个页面&#xff0c;根据传入的参数自动切换显示的界面信息。 上代码 1、js代码&#xff1a; Page({/*** 页面的初始数据*/data: {current: 0,},/*** 生命周期函数--监听页面加载*/onLoad(options) {//…

springboot集成quartz定时任务并接入后台管理系统(copy即用)

说明:项目启动后会根据设置的时间进行执行,业务代码根据自己的需求更改,数据库文件在最后(记得清空数据库哦~)这里需要注意的一点就是className字段表示的是下面的对应的DynamicTask的路径如:com.example.demo.quartz.task.DynamicTask,如有多个定时任务copy并更改Dynam…

成都直播产业园进行时!发挥直播电商优势 赋能优势产业发展

在当今数字化的时代&#xff0c;直播电商已经成为一种新型的商业模式&#xff0c;为优势产业的发展带来了巨大的机遇。通过直播电商&#xff0c;优势产业能够更好地展示自身特色和优势&#xff0c;扩大渠道&#xff0c;提升品牌影响力&#xff0c;从而实现产业的升级和转型。天…

实用设计方案:如何利用数字选择器搭建一个简单有效的脉冲发生电路

脉冲发生电路是电子电路中常见的一种电路&#xff0c;用于产生一系列脉冲信号。数字选择器是一种重要的电子元件&#xff0c;具有多路输入、单路输出的特点&#xff0c;常用于数据选择和信号调制等应用。下面将介绍如何利用数字选择器搭建一个简单而有效的脉冲发生电路&#xf…