当前位置: 首页 > news >正文

VUE-watch和watchEffect的区别

区别简短扼要地说:

        watch-官方定义:侦听一个或多个响应式数据源,并在数据源变化时调用所给的回调函数。是需要指定监听的数据,并且只有在响应式数据变化的时候去执行

        watchEffect-官方定义:立即运行一个函数,同时响应式地追踪其依赖,并在依赖更改时重新执行。它是不用指定的。

watch官网例子:

const count = ref(0)
watch(count, (count, prevCount) => {/* ... */
})

watchEffect官网例子:

const count = ref(0)watchEffect(() => console.log(count.value))
// -> 输出 0count.value++
// -> 输出 1

这里有三个补充:

补充(1):

监听器是可以停止的,我曾经也想过要停止它,我是这么写的,就是让监听器只执行一次:

const count = ref(0)
let a = true
watch(count, (count, prevCount) => {if(a){//写逻辑a =false}})

官网上是这么做的,只要在需要停止的地方调用即可:

补充(2):

请看以下两种写法:

// 第一种
const state = reactive({ count: 0 })
watch( () => state.count, (count, prevCount) => {/* ... */}
)// 第二种
const count = ref(0)
watch(count, (count, prevCount) => {/* ... */
})

它们的区别是什么?

第一种:

监听对象中某一个属性变化(reactive),强烈建议使用此方式监听reactive响应对象数据(无坑)

第二种:

监听单个基本数据类型(ref),(ref定义的基本类型使用watch监听的时候不需要.value)

补充(3):

监听对象(reactive),不建议使用

    watch(state,(newVal, oldValue) => {console.log(newVal, oldValue);  //{name: '小白', age: 23},{name: '小白', age: 23}},{ deep: false });

这里只能拿到新的值(newVal),拿不到旧值,并且深度监视好像无效。

多说一嘴:

监听对象中某几个属性是可以的(reactive)

 watch([() => obj.name, () => obj.age], (newVal, oldValue) => {console.log(newVal, oldValue);   //得到的是对象});

相关文章:

  • 景源畅信数字:抖音小店新手该怎么做?
  • 修改MySQL root用户密码
  • Threes 特效 炫酷传送门HTML5动画特效
  • 信息系统项目管理师--八大绩效域-规划绩效域
  • 前端生成二维码
  • 微软语音使用小计
  • C#编程-.NET Framework使用工具类简化对象之间的属性复制和操作
  • markdown 文件渲染工具推荐 obsidian publish
  • PMP 学习笔记(增量更新中)
  • OpenCV:入门(五)
  • 浅谈后端整合Springboot框架后操作基础配置
  • 比特米盒2代刷入ARMBIAN
  • VC++位移操作>>和<<以及逻辑驱动器插拔产生的掩码dbv.dbcv_unitmask进行分析的相关代码
  • Linux--09---RPM 、YUM
  • MariaDB 给指定列值自动加密(持久数据加触发器)
  • #Java异常处理
  • 03Go 类型总结
  • 10个确保微服务与容器安全的最佳实践
  • Angular 4.x 动态创建组件
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • FastReport在线报表设计器工作原理
  • github从入门到放弃(1)
  • Git学习与使用心得(1)—— 初始化
  • select2 取值 遍历 设置默认值
  • yii2权限控制rbac之rule详细讲解
  • 成为一名优秀的Developer的书单
  • 飞驰在Mesos的涡轮引擎上
  • 警报:线上事故之CountDownLatch的威力
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 微信小程序实战练习(仿五洲到家微信版)
  • 小程序button引导用户授权
  • hi-nginx-1.3.4编译安装
  • k8s使用glusterfs实现动态持久化存储
  • 阿里云API、SDK和CLI应用实践方案
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 昨天1024程序员节,我故意写了个死循环~
  • ​插件化DPI在商用WIFI中的价值
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (三)c52学习之旅-点亮LED灯
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .axf 转化 .bin文件 的方法
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .Net 路由处理厉害了
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET编程C#线程之旅:十种开启线程的方式以及各自使用场景和优缺点
  • .NET基础篇——反射的奥妙
  • ?php echo ?,?php echo Hello world!;?
  • @AutoConfigurationPackage的使用
  • @SuppressWarnings注解
  • [17]JAVAEE-HTTP协议
  • [2016.7 day.5] T2