VUE3 API之watch与watchEffect
- 默认仅在监听发生改变时触发回调,设置 immediate:true 可在侦听器创建时立即触发回调。
- 第一个参数是监听源:source,可以是以下几种
- 一个函数(getter),返回一个值。这种情况下,默认监听值的子属性,深层监听需要设置{deep:true}。见例子一。
- 响应式对象----这种情况下,可以深层监听。
- ref
- 由以上类型的值组成的数组。
- 第二个参数是发生变化时要调用的函数:callback。包含三个参数,新值,旧值,一个用于注册副作用清理回调的函数。多个监听源callback的参数,见例子二,获取新旧值,见例子三。第三个参数见下文。
- 第三个可选的参数是一个对象,支持以下这些选项:
immediate:在侦听器创建时立即触发回调。第一次调用时旧值是undefined。deep:如果源是对象,强制深度遍历,以便在深层级变更时触发回调。flush:调整回调函数的刷新时机。默认‘pre’,组件更新之前被调用;‘post’,在组件渲染之后执行,onMounted后,可以访问DOM;‘sync’,监听源发生改变时立即执行(慎,参考例子二,修改了监听源,却只触发了一次callback,设置{ flush: 'sync' },后,会触发两次callback)。onTrack / onTrigger:调试侦听器的依赖。
watchEffect:
- 默认在侦听器创建时立即触发回调,在执行中收集监听源;在组件更新之前被调用(flush:'pre');
- 第一个参数是要运行的副作用函数。这个副作用函数的参数也是一个函数,用来注册清理回调。清理回调会在该副作用下一次执行前被调用,可以用来清理无效的副作用。
- 第二个参数可选的参数是一个对象,支持以下这些选项:
- flush?: 'pre' | 'post' | 'sync' // 默认:'pre'
- onTrack?: (event: DebuggerEvent) => void
- onTrigger?: (event: DebuggerEvent) => void
+++++++++++++++++++++++++++++++++++++++++++++++++++++
:清除副作用函数,用来清理无效的副作用-触发的时机如下:
- 收集的监听源发生改变时,在下一次副作用函数执行前
- 监听器被停止(执行stop,或是组件被卸载)
使用场景,一个异步请求没有完成需要取消请求,
watchEffect(async (onCleanup) => {
const { response, cancel } = doAsyncWork(id.value)
// `cancel` 会在 `id` 更改时调用
// 以便取消之前
// 未完成的请求
onCleanup(cancel)
data.value = await response
})
或是防抖,上一个异步请求还没返回,又触发了一次副作用函数(监控用户输入不停的请求后台),需要取消上次的请求,进行新的请求。
+++++++++++++++++++++++++++++++++++++++++++++++++++++
:返回值是一个用来停止该副作用的函数。
const stop = watchEffect(() => {})
// 当不再需要此侦听器时:
stop()
+++++++++++++++++++++++++++++++++++++++++++++++++++++
watchPostEffect()#
watchEffect() 使用 flush: 'post' 选项时的别名。
watchSyncEffect()#
watchEffect() 使用 flush: 'sync' 选项时的别名。
+++++++++++++++++++++++++++++++++++++++++++++++++++++
例子一
const original1 = reactive({ count: { unit: { ccc: 1 } } });
const stop3 = watch(() => original1.count.unit.ccc, (n, o) => {
console.log('触发了original1.count.unit.ccc监听');
})
original1.count.unit.ccc = 2;
//控制台
触发了original1.count.unit.ccc监听
//改为
const original1 = reactive({ count: { unit: { ccc: 1 } } });
const stop3 = watch(() => original1.count.unit, (n, o) => {
console.log('触发了original1.count.unit.ccc监听');
})
original1.count.unit.ccc = 2;
//控制台 无打印
//添加watchOptions {deep:true}
const original1 = reactive({ count: { unit: { ccc: 1 } } });
const stop3 = watch(() => original1.count.unit, (n, o) => {
console.log('触发了original1.count.unit.ccc监听');
}, { deep:true })
original1.count.unit.ccc = 2;
//控制台
触发了original1.count.unit.ccc监听
例子二
const stop3 = watch([() => original1.count.unit.ccc, original], ([prevN1, prevN], [oldN1, oldN]) => {
console.log('触发了original1.count.unit.ccc监听');
console.log(prevN1, prevN);
console.log('触发了original监听');
console.log(oldN1, oldN);
},)
original1.count.unit.ccc = 2
original.count.unit = '*'
浏览打印

const original = reactive({ count: { unit: '$' } });
const stop = watch(() => JSON.parse(JSON.stringify(original.count)), (n, o) => {//A watch source can only be a getter/effect
console.log('watch');
console.log(n, o);
}, { deep: true })
original.count.unit = '*'
//浏览器打印
{unit: '*'} {unit: '$'}
VUE3 API之watch与watchEffect的更多相关文章
- 好久没发文了,一篇Vue3的Composition API使用奉上
Composition API Composition API是Vue3中推荐的组件代码书写方式,相较于传统的Options API来说,它能让业务逻辑处理和后期代码维护变的更加简单. 首先我们来看O ...
- Vue3.0新版API之composition-api入坑指南
关于VUE3.0 由于vue3.0语法跟vue2.x的语法几乎是完全兼容的,本文主要介绍了如何使用composition-api,主要分以下几个方面来讲 使用vite体验vue3.0 composit ...
- Vue3全家桶升级指南一composition API
1.setup() vue3中的composition API中最重要的就是setup方法了,相当于组件的入口,所有的composition API都必须放到setup()中的使用. setup是在组 ...
- vue3 高阶 API 大汇总,强到离谱
高阶函数是什么呢? 高阶函数英文名叫:Higher Order function ,一个函数可以接收一个或多个函数作为输入,或者输出一个函数,至少满足上述条件之一的函数,叫做高阶函数. 前言 本篇内容 ...
- Vue3笔记(二)了解组合式API的应用与方法
一.组合式API(Composition API)的介绍 官方文档: https://v3.cn.vuejs.org/guide/composition-api-introduction.html 组 ...
- Vue2 到 Vue3,重温这 5 个常用的 API
距离Vue3发布已经过去一年多时间了,从Vue2到Vue3是一个不小的升级,包括周边生态等.虽然目前大多数开发者们在使用的仍旧以Vue2为准,但Vue3显然是Vue开发者们未来必须面对的,而且前不久V ...
- 学习 vue3 第一天 vue3简介,创建vue3项目 Composition Api 初识
前言: 从今天开始来和大家一起学习 vue3 相信大家都不陌生,已经火了一段时间了,但是还是有不少人没有学习,那就跟着六扇老师来简单的入个门 废话不多说,来开始今天的学习 Vue3 简介: 2020年 ...
- Vue3实战系列:结合 Ant-Design-of-Vue 实践 Composition API
Vue 3 出来之后,很多人有如下想法,"又要学新东西啦"."我学不动了"等等. 但是事物总有它的两面性,前端知识更新的很快,利好勤奋好学的同学.计算机行业的迭 ...
- vue3.0 的 Composition API 的一种使用方法
网上讨论的文章已经很多了,这里举一个简单的例子来讨论一下 Composition API 的用法,具体问题才好具体讨论嘛. 假如我们要做一个论坛的讨论列表和分页,以前是把需要的数据都放在data里面, ...
- vue3.0 composition API
一.Setup函数 1.创建时间:组件创建之前被调用,优先与created被调用,this指向的实例为window,created所指向的实例为proxy 2.this指向:不会指向组件实例 3.参数 ...
随机推荐
- metasploit2-practice
Metasploittable2打靶教程 本次靶机练习主要熟悉:高危端口利用:metasploit中search,show及各个模块使用. 一.环境准备 1.把靶场放在vmware打开,启用nat模式 ...
- Jetpack Compose学习(11)——Navigation页面导航的使用
原文:Jetpack Compose学习(11)--Navigation页面导航的使用 - Stars-One的杂货小窝 在Android原生的View开发中的,也是有Navigation,原生我之后 ...
- JSP 与 Servlet 之间的联系,及其语法
JSP 是什么 JSP 将 Java 代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容.JSP 文件在运行时会被其编译器转换成更原始的 Servlet 代码.JSP ...
- 基于Python的OpenGL 04 之变换
1. 概述 本文基于Python语言,描述OpenGL的变换 前置知识可参考: 基于Python的OpenGL 03 之纹理 - 当时明月在曾照彩云归 - 博客园 (cnblogs.com) 笔者这里 ...
- Postgres的count统计误区
数据库统计数据量时常常用的是count(1)或者count(*),这两者区别不大,在postgres里面统计数据总量时,要注意count(column_name)与count(*)的区别,有些场景下会 ...
- ASP.NET Core - 配置系统之配置读取
一个应用要运行起来,往往需要读取很多的预设好的配置信息,根据约定好的信息或方式执行一定的行为. 配置的本质就是软件运行的参数,在一个软件实现中需要的参数非常多,如果我们以 Hard Code(硬编码) ...
- Vue中如何实现在线预览word文件、excel文件
一.查看word 1.引用mammoth.js (1)安装 npm install --save mammoth 1 npm install --save mammoth (2)引入import ma ...
- SpringBoot常用注解大全
常用注解概览 这里整理了一张SpringBoot常用注解的思维导图,本文主要讲解这些注解的用法. 组件相关注解 @ComponentScan 默认扫描当前包及其子包下面被@component,@Con ...
- docker 安装 jFrog
docker run --name artifactory-oss-6.18.1 -d -p 8083:8081 docker.bintray.io/jfrog/artifactory-oss:6.1 ...
- 【FPGA学习】MATLAB和FPGA实现FFT
本博客记录一下在matlab设计和在FPGA平台实现FFT的方法,平台是Xilinx的ZYNQ 参考: COE文件制作与使用 Vivado使用技巧(9):COE文件使用方法 .coe文件生成 在某些I ...