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 相关文章推荐
Vue3+elementui plus创建项目的方法
Dec 01 Vue.js
为什么推荐使用JSX开发Vue3
Dec 28 Vue.js
vue3中轻松实现switch功能组件的全过程
Jan 07 Vue.js
详解Vue的options
May 15 Vue.js
Vue Element-ui表单校验规则实现
Jul 09 Vue.js
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
Nov 27 Vue.js
一篇文章告诉你如何实现Vue前端分页和后端分页
Feb 18 Vue.js
Vue中Object.assign清空数据报错的解决方案
Mar 03 Vue.js
vue使用echarts实现折线图
Mar 21 Vue.js
Axios代理配置及封装响应拦截处理方式
Apr 07 Vue.js
vue 把二维或多维数组转一维数组
Apr 24 Vue.js
vue elementUI批量上传文件
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
打造计数器DIY三步曲(中)
2006/10/09 PHP
php生成的html meta和link标记在body标签里 顶部有个空行
2010/05/18 PHP
php.ini 配置文件的深入解析
2013/06/17 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
2014/03/11 PHP
ThinkPHP5.1表单令牌Token失效问题的解决
2019/03/22 PHP
PHP实现读取文件夹及批量重命名文件操作示例
2019/04/15 PHP
用 javascript 实现的点击复制代码
2007/03/24 Javascript
javascript 控制 html元素 显示/隐藏实现代码
2009/09/01 Javascript
javascript 动态设置已知select的option的value值的代码
2009/12/16 Javascript
JavaScript数组Array对象增加和删除元素方法总结
2015/01/20 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
Vue.js实战之使用Vuex + axios发送请求详解
2017/04/04 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
2018/04/03 Javascript
layui给下拉框、按钮状态、时间赋初始值的方法
2019/09/10 Javascript
JavaScript实现文件下载并重命名代码实例
2019/12/12 Javascript
vue 中 elment-ui table合并上下两行相同数据单元格
2019/12/26 Javascript
浅谈Python浅拷贝、深拷贝及引用机制
2016/12/15 Python
Python设计实现的计算器功能完整实例
2017/08/18 Python
Python内置函数——__import__ 的使用方法
2017/11/24 Python
python实现将一个数组逆序输出的方法
2018/06/25 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
2019/02/12 Python
Django接收post前端返回的json格式数据代码实现
2019/07/31 Python
python绘制雪景图
2019/12/16 Python
Python对象的属性访问过程详解
2020/03/05 Python
某IT外企面试题-二分法求方程!看看大家的C++功底
2015/07/04 面试题
行政人事岗位职责
2014/03/17 职场文书
小学语文教研活动总结
2014/07/01 职场文书
2014年企业工会工作总结
2014/11/12 职场文书
2015年感恩节演讲稿(优选篇)
2015/03/20 职场文书
聘用合同范本
2015/09/21 职场文书
盘点2020年适合农村地区创业的项目
2019/10/16 职场文书
Django 实现jwt认证的示例
2021/04/30 Python
详解缓存穿透击穿雪崩解决方案
2021/05/28 Redis
Mysql事务索引知识汇总
2022/03/17 MySQL