vue3 watch和watchEffect的使用以及有哪些区别


Posted in Vue.js onJanuary 26, 2021

1.watch侦听器

引入watch

import { ref, reactive, watch, toRefs } from 'vue'

对基本数据类型进行监听----- watch特性:

1.具有一定的惰性lazy 第一次页面展示的时候不会执行,只有数据变化的时候才会执行

2.参数可以拿到当前值和原始值

3.可以侦听多个数据的变化,用一个侦听起承载

setup() {
	const name = ref('leilei')
	watch(name, (curVal, prevVal) => {
 	console.log(curVal, prevVal)
 })
}
template: `Name: <input v-model="name" />`

对引用类型进行监听-----

setup() {
	const nameObj = reactive({name: 'leilei', englishName: 'bob'})
 监听一个数据
	watch(() => nameObj.name, (curVal, prevVal) => {
 	console.log(curVal, prevVal)
 })
 监听多个数据 
	watch([() => nameObj.name, () => nameObj.name], ([curName, curEng], [prevName, curEng]) => {
 	console.log(curName, curEng, '----', prevName, curEng)
  setTimeout(() => {
   stop1()
  }, 5000)
 })
 const { name, englishName } = toRefs(nameObj)
}
template: `Name: <input v-model="name" /> englishName: <input v-model="englishName" />`

2.watchEffect

没有过多的参数 只有一个回调函数

1.立即执行,没有惰性,页面的首次加载就会执行。

2.自动检测内部代码,代码中有依赖 便会执行

3.不需要传递要侦听的内容 会自动感知代码依赖,不需要传递很多参数,只要传递一个回调函数

4.不能获取之前数据的值 只能获取当前值

5.一些=异步的操作放在这里会更加合适

watchEffect(() => {
	console.log(nameObj.name) 
})

侦听器的取消 watch 取消侦听器用法相同

const stop = watchEffect(() => {
	console.log(nameObj.name) 
 setTimeout(() => {
 	stop()
 }, 5000)
})

const stop1 = watch([() => nameObj.name, () => nameObj.name], ([curName, curEng], [prevName, curEng]) => {
 	console.log(curName, curEng, '----', prevName, curEng)
  setTimeout(() => {
   stop1()
  }, 5000)
 })

watch也可以变为非惰性的 立即执行的 添加第三个参数 immediate: true

watch([() => nameObj.name, () => nameObj.name], ([curName, curEng], [prevName, curEng]) => {
 	console.log(curName, curEng, '----', prevName, curEng)
  setTimeout(() => {
   stop1()
  }, 5000)
 }, {
 	immediate: true
 })

以上就是vue3 watch和watchEffect的使用以及有哪些区别的详细内容,更多关于vue3 watch和watchEffect的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
如何使用 vue-cli 创建模板项目
Nov 19 Vue.js
Vue实现指令式动态追加小球动画组件的步骤
Dec 18 Vue.js
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
Dec 25 Vue.js
聊聊vue 中的v-on参数问题
Jan 29 Vue.js
手动实现vue2.0的双向数据绑定原理详解
Feb 06 Vue.js
详解vue中v-for的key唯一性
May 15 Vue.js
vue2实现provide inject传递响应式
May 21 Vue.js
Vue实现导入Excel功能步骤详解
Jul 03 Vue.js
vue ref如何获取子组件属性值
Mar 31 Vue.js
vue3使用vuedraggable实现拖拽功能
Apr 06 Vue.js
三种方式清除vue路由跳转router-link的历史记录
Apr 10 Vue.js
vue如何清除浏览器历史栈
May 25 Vue.js
vue实现轮播图帧率播放
Jan 26 #Vue.js
vue 组件基础知识总结
Jan 26 #Vue.js
深入了解Vue动态组件和异步组件
Jan 26 #Vue.js
如何在 Vue 表单中处理图片
Jan 26 #Vue.js
Vue实现摇一摇功能(兼容ios13.3以上)
Jan 26 #Vue.js
Vue中的nextTick作用和几个简单的使用场景
Jan 25 #Vue.js
Vue使用Ref跨层级获取组件的步骤
Jan 25 #Vue.js
You might like
用PHPdig打造属于你自己的Google[图文教程]
2007/02/14 PHP
PHP文件上传判断file是否己选择上传文件的方法
2014/11/10 PHP
PHP中array_slice函数用法实例详解
2014/11/25 PHP
php把数组值转换成键的方法
2015/07/13 PHP
PHP抓取远程图片(含不带后缀的)教程详解
2016/10/21 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
2017/05/30 PHP
php 可变函数使用小结
2018/06/12 PHP
centos7上编译安装php7以php-fpm方式连接apache
2018/11/08 PHP
Extjs学习笔记之六 面版
2010/01/08 Javascript
E3 tree 1.6在Firefox下显示问题的修复方法
2013/01/30 Javascript
js setTimeout 参数传递使用介绍
2013/08/13 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
2015/03/06 Javascript
总结Javascript中数组各种去重的方法
2016/10/04 Javascript
element-ui 中的table的列隐藏问题解决
2018/08/24 Javascript
使用Angular-CLI构建NPM包的方法
2018/09/07 Javascript
js实现课堂随机点名系统
2019/11/21 Javascript
详解基于element的区间选择组件校验(交易金额)
2021/01/07 Javascript
python 实现插入排序算法
2012/06/05 Python
Flask SQLAlchemy一对一,一对多的使用方法实践
2013/02/10 Python
介绍Python的Django框架中的QuerySets
2015/04/20 Python
python正则表达式及使用正则表达式的例子
2018/01/22 Python
关于django 数据库迁移(migrate)应该知道的一些事
2018/05/27 Python
在VS2017中用C#调用python脚本的实现
2019/07/31 Python
python实现梯度下降和逻辑回归
2020/03/24 Python
Python实现删除某列中含有空值的行的示例代码
2020/07/20 Python
Python代码注释规范代码实例解析
2020/08/14 Python
CSS3实现菜单悬停效果
2020/11/17 HTML / CSS
屈臣氏越南官网:Watsons越南
2021/01/14 全球购物
美国小蜜蜂Burt’s Bees德国官网:天然唇部、皮肤和身体护理产品
2020/06/14 全球购物
金山毒霸系列的笔试题
2013/04/13 面试题
写给女生的道歉信
2014/01/08 职场文书
2014植树节活动总结
2014/03/11 职场文书
房地产公司工程部经理岗位职责
2015/04/09 职场文书
关于五一放假的通知
2015/08/18 职场文书
初一英语教学反思
2016/02/15 职场文书
MIME类型中application/xml与text/xml的区别介绍
2022/01/18 HTML / CSS