当前位置: 首页 > news >正文

Vue侦听器Watch

31. Vue侦听器Watch

1. 定义

WatchVue.js提供的一个观察者模式,用于监听数据的变化并执行相应的回调函数。虽然计算属性Computed在大多数情况下更合适,但有时也需要一个自定义的侦听器Watch。因为在有些情况下,我们需要在状态变化时执行一些“副作用”:例如更改 DOM,或是根据异步操作的结果去修改另一处的状态。

2. 基本用法

在Vue组件中,我们可以使用watch来监听数据的变化并执行回调函数,示例如下:

<template><div><div><label for="qu">问题: </label><input type="text" id="qu" placeholder="请输入问题" v-model="question"></div><div>{{ answer }}</div></div>
</template>
<!-- vue2 -->
<script>
import axios from "axios"
export default {data() {return {question: '',answer: "no answer"}},watch:{question(newValue, oldValue) {this.answer = "Thinking..."this.debounceGet()}},  created() {// 接收防抖获取数据函数this.debounceGet = this.debounce(this.getAnswer, 500)},  methods:{// 调用接口获取数据async getAnswer() {try{const res = await axios.get('https://yesno.wtf/api')this.answer = await res.data.answer} catch(error) {this.answer = error}},// 防抖函数控制debounce(fn, wait) {let timer = nullreturn function() {if(timer)clearTimeout(timer)timer = setTimeout(() => {fn.apply(this, arguments)}, wait);}}}
}
</script><!-- vue3 -->
<script setup>
import axios from "axios"
import { ref, watch } from "vue"const question = ref("")
const answer = ref("no answer")// 异步获取数据
const getAnswer = async() => {try{const res = await axios.get('https://yesno.wtf/api')answer.value = await res.data.answer} catch(error) {answer.value = error}
}
// 防抖函数
const debounce = (fn, wait) => {let timer = nullreturn function() {if(timer)clearTimeout(timer)timer = setTimeout(() => {fn.apply(this, arguments)}, wait);}
}
// 接收防抖获取数据函数
const debounceGet = debounce(getAnswer, 500)// 侦听器
watch(question, (newValue, oldValue) => {answer.value = "Thinking..."debounceGet()
})
</script>

3. watch高级用法

watch侦听器还有三个属性:

  • handlerwatch中需要具体执行的方法。
  • immediate:在组件初始化时立即执行hanler中代码。
  • deep:深度监听,可以监听对象或数组内部属性的变化。
<!-- vue2 -->
<script>
export default {data() {return {obj: {name: "Jack",age: 20}}},watch:{obj: {handler(newValue, oldValue){console.log("obj被改变");},immediate: true,deep: true}},methods:{setName(){this.obj.name = "Jarry"}}
}
</script>

在vue3中,直接给 watch() 传入一个响应式对象,会隐式地创建一个深层侦听器——该回调函数在所有嵌套的变更时都会被触发:

// vue3
const obj = reactive({name: "Jack",age: 20
})
const setName = () => {obj.name = "Bob"
}
//直接传入响应式对象,所有子孙元素改变都会侦听到,默认深度监听
watch(obj, (newValue, oldValue) => {console.log("obj被改变");
})
//传入一个getter函数,只会侦听到对应的属性的变化,默认深度监听
watch(() => obj.name, (newValue, oldValue) => {console.log("obj.name被改变");
})
// 传入deep属性,强制监听
watch(() => obj.age, (newValue, oldValue) => {console.log("obj.age被改变");
}, { deep: true })setName();//obj被改变
obj.age++

watch 默认是懒执行的:仅当数据源变化时,才会执行回调。但在某些场景中,我们希望在创建侦听器时,立即执行一遍回调。举例来说,我们想请求一些初始数据,然后在相关状态更改时重新请求数据。

我们可以通过传入 immediate: true 选项来强制侦听器的回调立即执行:

// 传入immediate, 立即执行
watch(obj, (newValue, oldValue) => {console.log("立即执行");
}, { immediate: true })

相关文章:

Vue侦听器Watch

31. Vue侦听器Watch 1. 定义 Watch是Vue.js提供的一个观察者模式&#xff0c;用于监听数据的变化并执行相应的回调函数。虽然计算属性Computed在大多数情况下更合适&#xff0c;但有时也需要一个自定义的侦听器Watch。因为在有些情况下&#xff0c;我们需要在状态变化时执行一…...

云快充研发中心平台架构师谈云原生稳定性建设之路

作者&#xff1a;吕周洋 大家好&#xff0c;我是来自云快充研发中心的平台架构师吕周洋&#xff0c;今天我给大家分享云快充云原生稳定性之路。 点击查看&#xff1a;云快充研发中心平台架构师 吕周洋&#xff1a;云快充云原生稳定性治理之路 云快充成立于2016年&#xff0c…...

ENVI IDL学习笔记之基本操作

前言ENVI IDL&#xff08;交互式数据语言&#xff09;是一个通用的科学计算包&#xff0c;它提供了一套数学函数、数据分析工具&#xff0c;以及一些科学可视化和动画工具。IDL 是 ENVI 图像处理和分析软件的基础&#xff0c;可用于编写脚本并自动执行许多使用 ENVI 图形用户界…...

多线程面试题

1. Sychronized的锁升级过程是怎样的&#xff1f; 2. Tomcat 中为什么要使用自定义类加载器&#xff1f; 3. 说说对线程安全的理解 4. 对守护线程的理解 5. 并发、并行、串行之间的区别 6. Java死锁如何避免&#xff1f; 7. 谈谈你对AQS的理解&#xff0c;AQS如何实现可重入锁&…...

YARN运行流程

YARN是Hadoop资源管理器&#xff0c;他是一个通用资源管理平台和调度平台&#xff0c;可为上层应用提供统一的资源管理和调度&#xff0c;MapReduce等运算程序则相当于运行于操作系统上的应用程序&#xff0c;YARN为这些程序提供运算所需的资源内存、cpu。 YARN并不清楚用户提…...

java八股系列——SpringMVC从接受请求到完成响应的过程

Spring的MVC框架是围绕一个DispatcherServlet来设计的&#xff0c;这个Servlet会把请求分发给各个处理器&#xff0c;并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等&#xff0c;甚至还能支持文件上传。 流程大致如下&#xff1a; 用户发起请求&#xff1a;用…...

Elasticsearch索引全生命周期

索引(Index)是Elasticsearch中最重要的概念之一&#xff0c;也是整个Elasticsearch操作的基础&#xff0c;它是相互关联的文档的一个集合。在Elasticsearch种&#xff0c;数据存储为 JSON 文档&#xff0c;每个文档将一组键&#xff08;字段或属性的名称&#xff09;与其对应的…...

汇编指令学习(LOOP)

一、xor异或操作&#xff0c;相同为0&#xff0c;不同为1xor eax,eaxeax异或eax&#xff0c;相同为0&#xff0c;并把结果存放到eax&#xff0c;简单说该语句就是想eax寄存器清零。二、ECX&#xff0c;计数器mov ecx,0x3将ecx寄存器设置为3三、DEC减一操作dec ecxecx寄存器的值…...

Linux 配置本地yum源

挂载光盘 进入包 配置路径&#xff0c;查看在线yum源 移动在线yum源到/home/目录下 进入vi,任意取名以.repo结尾即可 按住i进行编辑&#xff0c;输入以下内容 注意gpgcheck1是检验&#xff0c;配置本地yum源不需要检验 写入上图内容按住&#xff1a;输入wq&#xff0c;点击回车…...

【PyTorch】教程:torch.nn.LeakyReLU

torch.nn.LeakyReLU 原型 CLASS torch.nn.LeakyReLU(negative_slope0.01, inplaceFalse) 参数 negative_slope (float) – 控制负值斜率&#xff0c;默认为 1e-2inplace (bool) – in-place 操作&#xff0c;默认为 False 定义 LeakyReLU(x)max⁡(0,x)negative_slope∗min⁡…...

【刷题】-- 基础 -- 二分查找

精于结构、敏于心智、熟于代码 方式&#xff1a;对于会的代码&#xff1a;学会以最快的速度构建&#xff0c;并以最快的速度书写&#xff1b;对于不会的代码&#xff1a;学会&#xff08;以最短的路径下&#xff09;看懂别人的代码。学会使用参考文档、熟悉每一个容器。 刷题位…...

Spark MLlib 特征工程

Spark MLlib 特征工程预处理特征选择归一化离散化Embedding向量计算特征工程制约了模型效果 : 决定了模型效果的上限 , 而模型调优只是在不停地逼近上限好的特征工程才能有好的模型 特征处理函数分类 : 预处理 : 将模型无法直接消费的数据&#xff0c;转为可消费的数据形式特…...

CentOS7 完全卸载 php

在 CentOS 7 使用 yum install 简单安装 php 后&#xff0c;发现 php 版本 5.4 &#xff0c;太低了&#xff01; 然后&#xff0c;使用 yum remove 简单卸载后&#xff0c;发现 php 还在&#xff0c;不干净&#xff01; 只好 rpm 慢慢卸载 rpm -qa |grep php php-gd-5.4.16-4…...

关于OCS认证里必须知晓的内容

【关于OCS认证里必须知晓的内容】美国非营利组织Textile Exchange推出的有机认证标准——有机含量标准(The Organic Content Standard)&#xff0c;简称OCS。该标准通过跟踪有机原材料的种植从而监管整个有机产业链。OCS将应用于各种有机种植原料的验证&#xff0c;而不只限于有…...

创业做电商难不难?新人做电商怎么才能挣钱?

这几年经济不景气&#xff0c;创业做电商的人越来越多&#xff0c;但是&#xff0c;对于多数人来说&#xff0c;一开始做电商&#xff0c;都是试错成本&#xff0c;没有系统学习或者是跟着半吊子二把刀学的&#xff0c;结果赔钱就算了&#xff0c;新人创业做电商到底难不难&…...

【项目设计】高并发内存池(七)[性能测试和提升]

&#x1f387;C学习历程&#xff1a;入门 博客主页&#xff1a;一起去看日落吗持续分享博主的C学习历程博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a; 也许你现在做的事情&#xff0c;暂时看不到成果&#xff0c;但不要忘记&…...

PHP:Laravel cast array json数据存数据库时unicode 编码问题和update更新不触发数据转换

目录问题描述问题解决方式一&#xff1a;自定义属性方式二&#xff1a;继承覆写方式三&#xff1a;trait复用方式四&#xff1a;定义Cast子类update不生效参考文章问题描述 Model示例 class UserModel extends Model {protected $table tb_user;protected $casts [alias …...

自动化测试总结--断言

采购对账测试业务流程中&#xff0c;其中一个测试步骤总是失败&#xff0c;原因是用例中参数写错及断言不明确 一、问题现象&#xff1a; 采购对账主流程中&#xff0c;其中一个步骤失败了&#xff0c;会导致这个套件一直失败 图&#xff08;1&#xff09;测试报告视图中&…...

传输线的物理基础(三):传输线的瞬时阻抗

每个信号都有一个上升时间 RT&#xff0c;通常是从 10% 到 90% 的电压电平测量的。当信号沿传输线向下移动时&#xff0c;前沿在传输线上展开并具有空间范围。如果我们可以冻结时间并观察电压分布向外移动时的大小&#xff0c;我们会发现类似下图的东西。传输线上上升时间的长度…...

第六章:多线程

第六章&#xff1a;多线程 6.1&#xff1a;程序、进程、线程基本概念 程序 程序program是为了完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码&#xff0c;静态对象。 进程 ​ 进程process是程序的一次执行过程&#xff0c;或是正在运行的一个程序。是一个…...

铁路与公路

蓝桥杯集训每日一题acwing4074 某国家有 n 个城市&#xff08;编号 1∼n&#xff09;和 m 条双向铁路。 每条铁路连接两个不同的城市&#xff0c;没有两条铁路连接同一对城市。 除了铁路以外&#xff0c;该国家还有公路。 对于每对不同的城市 x,y&#xff0c;当且仅当它们之…...

GitHub Copilot 全新升级,工作效率提升 55%

2021年 6 月&#xff0c;GitHub 和 OpenAI 推出了 GitHub Copilot 预览版&#xff0c;可根据命名或者正在编辑的代码上下文为开发者提供代码建议&#xff0c;被称为“你的 AI 结对程序员”。 近日&#xff0c;GitHub 宣布&#xff0c;经过去年 12 月以来的短暂测试后&#xff…...

【IoT】《天道》中音响案例的SWOT分析

在20世纪80年代初&#xff0c;SWOT最初是由美国知名管理学教授海因茨韦里克提出的。 之后这个工具就经常被用于企业的战略分析、竞争对手分析等场景。 在每年例行的公司产品规划过程中&#xff0c;我个人也经常使用这个工具。 由于涉及一些公司商业上的信息&#xff0c;下面会用…...

如何实现接口幂等性

1 什么是幂等 幂等操作的特点是一次或者任意多次执行所产生的影响均与一次执行的影响相同&#xff0c;不会因为多次的请求而产生不一样的结果。换句话说&#xff0c;就是我使用相同的请求参数&#xff0c;去请求同一个接口&#xff0c;不管请求多少次获取到的响应数据应该是一…...

相恨见晚的office办公神器(不坑盒子/打工人Excel插件2023年最新版)

不坑盒子 这是一个非常好用的插件工具&#xff0c;专门应用在Word文档和wps&#xff0c;支持Office 2010以上的版本&#xff0c;操作也简单且实用。 不坑盒子下载及使用说明 一键排版功能 像是下面的自动排版功能&#xff0c;可以在配置里面先设定好需要的格式&#xff0c;…...

matlab基础到实战(1)

目录概述sin函数例子四则运算实数复数逻辑运算复数运算模幅角共轭向量二维向量定义序列生成向量向量索引方式加减乘除向量间运算加减乘法除法概述 MATLAB是美国MathWorks公司出品的商业数学软件&#xff0c;用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理…...

谷歌发布编写分布式应用的框架Service Weaver

一个新的框架&#xff0c;在本地以模块化单体的形式运行&#xff0c;一旦部署&#xff0c;则为分布式微服务架构 转载请注明来源&#xff1a;https://janrs.com/2023/03/%e8%b0%b7%e6%ad%8c%e5%8f%91%e5%b8%83%e7%bc%96%e5%86%99%e5%88%86%e5%b8%83%e5%bc%8f%e5%ba%94%e7%94%a8…...

详解FPGA:人工智能时代的驱动引擎观后感

详解FPGA&#xff1a;人工智能时代的驱动引擎观后感 本书大目录 第一章 延续摩尔定律 第二章 拥抱大数据的洪流 第三章 FPGA在人工智能时代的独特优势 第四章 更简单也更复杂——FPGA开发的新方法 第五章 站在巨人肩上——FPGA发展新趋势 文章目录详解FPGA&#xff1a;人工智能…...

Rest/Restful接口

Rest Rest的全称是Representational State Transfer 。Rest是一种架构风格。Rest有很多原则和限制: 客户端-服务端架构模式无状态可缓存统一接口分层系统按需缓存 Rest对我们开发人员来说基本上就是资源&#xff0c;我们一般通过URI表示我们请求的一个资源。例如&#xff1a…...

【vue init】三.项目引入axios、申明全局变量、设置跨域

教程目录 一&#xff1a;《【vue init】使用vue init搭建vue项目》 二&#xff1a;《【vue init】项目使用vue-router,引入ant-design-vue的UI框架&#xff0c;引入less》 三&#xff1a;《【vue init】项目引入axios、申明全局变量、设置跨域》 根据前文《【vue init】项目使…...

网站管理方案/投放广告

基本介绍 数据库、表、函数等 Hive 对象的定义存储在 Metastore 中。 根据系统的配置方式&#xff0c;统计数据和授权记录也可能存储在那里。 Hive 和其他执行引擎在运行时使用此数据来确定如何解析、授权和有效执行用户查询。 Metastore 通过 DataNucleus 将对象定义保存到关…...

不备案 国内网站/自己怎么创建网站

今天给大家分享在VC6.0环境下编写C语言程序的基本步骤&#xff0c;为初学者打开学习C语言的第一道门。具体步骤如下(如果需要软件资源&#xff0c;可以留言)&#xff1a;1&#xff09;新建工作区依次点击 文件--新建--工作区 或是CtrlN&#xff0c;新建工作区&#xff0c;弹出如…...

中上网站建设/网络宣传平台有哪些

2017-04-06 回答python编程下&#xff0c;检查ip是否能ping通&#xff0c;并且分别导入两个文件&#xff0c;代码如下&#xff1a;#!/usr/bin/python#-*- coding:gb18030 -*-created on 2015-7-7#判断文件中的ip是否能ping通&#xff0c;并且将通与不通的ip分别写到两个文件中#…...

可以做外链的网站/网页设计免费模板

【问题描述】 子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。子网掩码与 IP 地址结构相同&#xff0c;是32 位二进制数&#xff0c;其中网络号部分全为 “1” 和主机号部分全为 “0” 。利用子网掩码可以判断两台主机是否中同一子网中。若两台主机的IP …...

搜索引擎优化简称seo/东莞seo网络营销

每次有点什么感想&#xff0c;想写blog的时候&#xff0c;都是不在电脑跟前的时候&#xff0c;慢慢的&#xff0c;我的blog有点开始荒凉了。就像这几天的长假&#xff0c;懒得连电脑都不想碰&#xff0c;每次想写点什么的时候&#xff0c;想想还要开机&#xff0c;就放弃了。这…...

中国建设监理官方网站/分析网站推广和优化的原因

12月05日&#xff0c;钛博士机器人侦测到 15 起发生在科技和互联网行业的投融资或并购事件&#xff0c;其中 12 起发生在中国境内&#xff0c;3 起发生在海外&#xff0c;总计交易额超过8.23亿人民币。 中国境内今天科技行业投融资总额约6.47亿人民币&#xff0c;单笔最大交易事…...