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 组件注册
Nov 20 Vue.js
Vue实现购物小球抛物线的方法实例
Nov 22 Vue.js
实用的 vue tags 创建缓存导航的过程实现
Dec 03 Vue.js
梳理一下vue中的生命周期
Dec 30 Vue.js
vue中父子组件的参数传递和应用示例
Jan 04 Vue.js
vue使用过滤器格式化日期
Jan 20 Vue.js
vue 中 get / delete 传递数组参数方法
Mar 23 Vue.js
vue backtop组件的实现完整代码
Apr 07 Vue.js
使用vue-element-admin框架从后端动态获取菜单功能的实现
Apr 29 Vue.js
Vue项目打包、合并及压缩优化网页响应速度
Jul 07 Vue.js
关于Vue中的options选项
Mar 22 Vue.js
vue项目proxyTable配置和部署服务器
Apr 14 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
codeigniter自带数据库类使用方法说明
2014/03/25 PHP
destoon数据库表说明汇总
2014/07/15 PHP
PHP常用处理静态操作类
2015/04/03 PHP
启用Csrf后POST数据时出现的400错误
2015/07/05 PHP
PHP简单实现解析xml为数组的方法
2018/05/02 PHP
本地对象Array的原型扩展实现代码
2010/12/04 Javascript
javascript数字数组去重复项的实现代码
2010/12/30 Javascript
在IE浏览器中resize事件执行多次的解决方法
2011/07/12 Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
JS使用getComputedStyle()方法获取CSS属性值
2014/04/23 Javascript
浅谈利用JavaScript进行的DDoS攻击原理与防御
2015/06/04 Javascript
聊一聊jQuery插件uploadify使用方法
2016/08/24 Javascript
nodejs进阶(6)—连接MySQL数据库示例
2017/01/07 NodeJs
nodejs使用redis作为缓存介质实现的封装缓存类示例
2018/02/07 NodeJs
Bootstrap Fileinput 4.4.7文件上传实例详解
2018/07/25 Javascript
详解bootstrap-fileinput文件上传控件的亲身实践
2019/03/21 Javascript
layer弹出层扩展主题的方法
2019/09/11 Javascript
深入理解Antd-Select组件的用法
2020/02/25 Javascript
Openlayers显示瓦片网格信息的方法
2020/09/28 Javascript
python通过pil模块将raw图片转换成png图片的方法
2015/03/16 Python
python批量替换页眉页脚实例代码
2018/01/22 Python
详解python使用turtle库来画一朵花
2019/03/21 Python
在Python中如何传递任意数量的实参的示例代码
2019/03/21 Python
Python填充任意颜色,不同算法时间差异分析说明
2020/05/16 Python
如何利用python之wxpy模块玩转微信
2020/08/17 Python
详解python算法常用技巧与内置库
2020/10/17 Python
EJB的几种类型
2012/08/15 面试题
小学三年级数学教学反思
2014/01/31 职场文书
聊城大学毕业生自荐书
2014/02/01 职场文书
《手指教学》反思
2014/02/14 职场文书
怎样写观后感
2015/06/19 职场文书
幼儿园安全教育随笔
2015/08/14 职场文书
优秀的商业计划书,让融资一步到位
2019/05/07 职场文书
详解MySQL数据库千万级数据查询和存储
2021/05/18 MySQL
Python3中最常用的5种线程锁实例总结
2021/07/07 Python
Windows10安装Apache2.4的方法步骤
2022/06/25 Servers