watch和watchEffect

news/2024/7/10 3:02:13 标签: vue

学习笔记记录(内容来源于官网)

watch

vue3watch用法和vue变化也不是特别大,vue3支持侦听多个数据源

用法没太大变化:wach是一个钩子函数,支持传入三个参数(个人理解)

1、监听对象

2、回调函数(可以拿到当前值,和上一次的值)

3、对象:是否深度监控属性变化等{deep:true}

// 侦听一个 getter
const state = reactive({ count: 0 })
watch(
  () => state.count,
  (count, prevCount) => {
    /* ... */
  }
)

// 直接侦听ref
const count = ref(0)
watch(count, (count, prevCount) => {
  /* ... */
},{
  deep:true
})

 侦听多个源(用法和单个没什么太大区别,只是改为数组的方式)

watch([fooRef, barRef], ([foo, bar], [prevFoo, prevBar]) => {
  /* ... */
})

watchEffect

官方:为了根据响应式状态自动应用重新应用副作用,我们可以使用 watchEffect 方法。它立即执行传入的一个函数,同时响应式追踪其依赖,并在其依赖变更时重新运行该函数

const count = ref(0)

watchEffect(() => console.log(count.value))
// -> logs 0

setTimeout(() => {
  count.value++
  // -> logs 1
}, 100)

停止侦听

显示调用返回值停止监听

const stop = watchEffect(() => {
  /* ... */
})

// later
stop()

总结:

1、不需要手动传入依赖,每次初始化时会执行一次回调函数来自动获取依赖(watchEffect 不须要指定监听的属性,他会自动的收集依赖, 只要回调中引用到了 响应式的属性, 那么当这些属性变动的时候,这个回调都会执行,而 watch 只能监听指定的属性而作出变动)

2、无法获取到原值,只能得到变化后的值

 

 


http://www.niftyadmin.cn/n/951513.html

相关文章

TS学习笔记(十):命名空间

在确保我们创建的变量不会泄露至全局变量中,我们以前曾采用过这种代码组织形式: (function(someObj){someObj.age 18;})(someObj || someObj {});复制代码但在基于文件模块的项目中,我们无须担心这一点,此种方式,适合…

TS学习笔记:命名空间

在确保我们创建的变量不会泄露至全局变量中,我们以前曾采用过这种代码组织形式: (function(someObj){someObj.age 18; })(someObj || someObj {});但在基于文件模块的项目中,我们无须担心这一点,此种方式,适合用于合…

vue 预览pdf

<embed:src"previewSrc"type"application/pdf"width"1200px"height"1000px"> embed 标签h5特性中包含四个属性&#xff1a;高、宽、类型、预览文件src&#xff01; 与< iframe > < / iframe > 不同&#xff0c;这个…

CSDN博客第一天,求关注!!!

CSDN博客第一天&#xff0c;求关注&#xff0c;欢迎各位前辈、大侠、大佬捧场。

OpenLayers 4 ol.source 详解

source 是 Layer 的重要组成部分&#xff0c;表示图层的来源&#xff0c;也就是服务地址。 除了在构造函数中指定外&#xff0c;还可以使用 layer.setSource(source) 稍后指定。 一、包含的类型 ol.source.BingMaps &#xff0c;必应地图的切片数据&#xff0c;继承自ol.sour…

Vue中:error ‘XXXXX‘ is not defined no-undef解决办法

报错内容: ClientCompiled with some errors in 7.42s √ ServerCompiled successfully in 6.05sERROR Failed to compile with 1 errors friendly-errors 17:33:15 ERROR in ./pages/pla…

如何解决Android中 Error generating final archive: Debug Certificate expired on的问题

一、问题描述 今天&#xff0c;打开eclipse编译android project&#xff0c;提示如下错误&#xff1a; Error generating final archive: Debug Certificate expired on 13-8-14 下午5:03 二、产生原因 这个问题产生的原因是&#xff1a; android要求所有的程序必须有签名&…

如何批量导入数据到Sqlite数据库

做android和ios开发的一般都用Sqlite数据库&#xff0c;有的时候数据需要批量导入&#xff0c;那么如何导入呢&#xff1f; 在这里&#xff0c;介绍2种方法供大家参考。 一、用sqlite命令 以windows系统为例&#xff0c;linux下命令是一样的。 1.安装sqlite工具包 首先要安装有…