Vue基础(3)监听数据

ops/2024/10/22 15:35:06/

1. 监听 ref

<script setup>javascript">
import { ref, watch} from 'vue'const count = ref(0)
watch(count, (newValue, oldValue) => {console.log(`count changed from ${oldValue} to ${newValue}`)
})
</script><template><button @click="count++">{{ count }}</button> 
</template>

2. 监听 reactive

不能直接监听响应式对象的属性值,而是需要用一个返回该属性的 getter 函数。

<script setup>javascript">
import { reactive, watch} from 'vue'const state = reactive({count: 0})
watch(() => state.count, (newValue, oldValue) => {console.log(`count changed from ${oldValue} to ${newValue}`)
})
</script><template><button @click="state.count++">{{ state.count }}</button> 
</template>

3. 可选配置对象

  • deep:当设置为 true 时,监听器会进行深度监听。即当监听的数据源(对象或数组)内部的属性值发生变化时,监听器也会触发回调函数。
<script setup>javascript">
import { reactive, watch} from 'vue'const state = reactive({good: {count: 2, price: 20}})
watch(() =>state.good, (newValue, oldValue) => {		// newValue和oldValue相同console.log(`count changed from ${oldValue.count } to ${newValue.count}`)	// 点击之后打印'from 3 to 3'
}, {deep: true})	// 没有配置deep: true时,点击count变化但是没有打印日志
</script><template><span>{{ state.good }}</span><button @click="state.good.count++">+</button> 
</template>
  • immediate:当设置为 true 时,监听器会在初始化时立即执行一次回调函数,即不需要等待被监听的数据源发生变化。
<script setup>javascript">
import { reactive, watch} from 'vue'const state = reactive({good: {count: 2, price: 20}})
watch(() =>state.good, (newValue, oldValue) => {		console.log(newValue)		// Proxy(Object) {count: 2, price: 20}console.log(oldValue)		// undefined
}, {immediate: true})	 // 初始化时打印一次
</script><template><span>{{ state.good }}</span><button @click="state.good.count++">+</button> 
</template>
  • once:当设置为 true 时,监听器只会在第一次数据变动时触发回调函数,之后即使被监听的数据源再次发生变化,也不会再次触发回调函数。

4. watchEffect

与 watch 相比,watchEffect 不需要明确指定要监听的数据源,它会立刻执行一次函数,并自动跟踪该函数中使用的所有响应式引用和计算属性,当它们变化时重新运行该函数。

watchEffect( () => {console.log(count.value)
})

http://www.ppmy.cn/ops/45493.html

相关文章

Vue3上传下载的样式模版 | 附Demo(Vue3 + Java)

目录 前言1. 基本知识2. Demo3. 彩蛋3.1 下载3.2 上传 前言 基本的Vue3知识推荐阅读&#xff1a;Vue 目录 1. 基本知识 对于下述Demo涉及以下知识点&#xff1a; Vue 组件基础 使用 defineComponent 定义一个 Vue 组件 script setup 是一种新的 <script> 语法糖&…

大厂Java面试题:MyBatis的映射器(Mapper.xml)中有哪些常见的元素?

大家好&#xff0c;我是王有志。今天给大家带来的是一道来自京东的 MyBatis 面试题&#xff1a;MyBatis的映射器&#xff08;Mapper.xml&#xff09;中有哪些常见的元素&#xff1f;MyBatis 的映射器中提供了 9 个顶级元素&#xff0c;按照功能可以分为 3 类&#xff1a; SQL …

辅助科技照亮道路,携手共促盲文书写技能新飞跃

在这个科技日新月异的时代&#xff0c;创新的力量正以前所未有的方式融入我们的日常生活&#xff0c;特别是对于视觉障碍群体而言&#xff0c;技术的每一次进步都是通往更加独立生活的桥梁。今天&#xff0c;让我们聚焦于一款名为“蝙蝠避障”的辅助软件&#xff0c;它不仅为盲…

树与图的深度优先遍历

数和图的存储方式与遍历 数和图的存储方式&#xff1a; 一般有两种 树是一种特殊的图&#xff08;即无环联通图&#xff09;。所以下面只讲图。 图的话分为两种&#xff1a;①有向图&#xff08;边是有方向的&#xff1a;a➡️b&#xff09;和 ②无向图&#xff08;边是无方…

Elasticsearch集群许可证过期问题解决方法汇总

最近在使用elasticsearch的过程中,使用elastic-head进行可视化展示集群的状态和信息,从2024年5月18日突然elastic-head无法现在集群的状态界面啦,elasticsearch集群状态是正常,命令如下: curl -X GET "localhost:9200/_cluster/health?pretty" 在google页面上通过…

面试阿里算法岗,艰难走到终面了。。。

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 总结链接…

HTML用法介绍

文章目录 一、HTML概念和模版二、常用标签及用法1.p标签2.span标签3.h标签4.hr标签5.img标签6.a标签7.input标签8.table标签 一、HTML概念和模版 HTML的全称为超文本标记语言&#xff0c;它包括一系列标签组成&#xff0c;模版及各部分注释如下&#xff1a; <!--声明文档类…

Postman进阶功能-工作空间

1、工作空间介绍 Postman 的工作空间是一个充满无限可能和创造力的领域。它就像是一个专门为接口测试精心打造的独特空间&#xff0c;在这里&#xff0c;各种元素和功能相互交织、协同作用。工作空间为我们提供了一个集中管理和组织接口相关信息的场所&#xff0c;让我们能够清…