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在H5 项目中使用融云进行实时个人单聊通讯
Dec 14 Vue.js
Vue+scss白天和夜间模式切换功能的实现方法
Jan 05 Vue.js
如何在vue中使用HTML 5 拖放API
Jan 14 Vue.js
Vue项目打包部署到apache服务器的方法步骤
Feb 01 Vue.js
vue3.0 项目搭建和使用流程
Mar 04 Vue.js
vue路由实现登录拦截
Mar 24 Vue.js
vue完美实现el-table列宽自适应
May 08 Vue.js
vue+springboot实现登录验证码
May 27 Vue.js
Vue实现导入Excel功能步骤详解
Jul 03 Vue.js
Vue实现跑马灯样式文字横向滚动
Nov 23 Vue.js
Vue3如何理解ref toRef和toRefs的区别
Feb 18 Vue.js
如何vue使用el-table遍历循环表头和表体数据
Apr 26 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
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
php获取一个变量的名字的方法
2014/09/05 PHP
分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
2015/12/01 PHP
详解 PHP加密解密字符串函数附源码下载
2015/12/18 PHP
php微信浏览器分享设置以及回调详解
2016/08/01 PHP
PHP CURL使用详解
2019/03/21 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
基于php伪静态的实现方法解析
2020/07/31 PHP
JS代码判断IE6,IE7,IE8,IE9的函数代码
2013/08/02 Javascript
js控制input输入字符解析
2013/12/27 Javascript
javascript实现数字+字母验证码的简单实例
2014/02/10 Javascript
Jquery中的层次选择器与find()的区别示例介绍
2014/02/20 Javascript
JavaScript获得当前网页来源页面(即上一页)的方法
2015/04/03 Javascript
js实现文本框支持加减运算的方法
2015/08/19 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
2015/09/04 Javascript
浅谈JavaScript异步编程
2017/01/20 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
vue axios基于常见业务场景的二次封装的实现
2018/09/21 Javascript
javascript json字符串到json对象转义问题
2019/01/22 Javascript
javascript中的this作用域详解
2019/07/15 Javascript
[28:57]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/16 DOTA
python re正则匹配网页中图片url地址的方法
2018/12/20 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
pytorch常见的Tensor类型详解
2020/01/15 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
2020/03/06 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
2020/03/09 Python
Python openpyxl模块实现excel读写操作
2020/06/30 Python
int和Integer有什么区别
2013/05/25 面试题
饮料业务员岗位职责
2013/12/15 职场文书
施工资料员的岗位职责
2013/12/22 职场文书
CAD制图设计师自荐信
2014/01/29 职场文书
考核工作实施方案
2014/03/30 职场文书
本科毕业生求职信
2014/06/15 职场文书
传承焦裕禄精神思想汇报2014
2014/09/10 职场文书
出生证明范本
2015/06/15 职场文书
golang使用map实现去除重复数组
2022/04/14 Golang