本文介绍: 如果定义reactive数据,想去使用watch监听数据改变,则无法正确获取旧值,并且deep属性配置无效自动强制开启了深层次监听。如果使用 ref 初始化一个对象或者数组类型数据,会被自动转成reactive实现方式生成proxy代理对象。也会变得无法正确取旧值。用任何方式生成数据,如果接收变量一个proxy代理对象,就都会导致watch这个对象时,watch回调里无法正确获取旧值。所以当大家使用watch监听对象时,如果在不需要使用旧值的情况,可以正常监听对象没关系;
let obj = reactive({
  text:'hello'
})
watchEffect(()=>{
  console.log('触发了watchEffect');
  console.log(obj.text);
})
let obj= reactive({
  text:'hello'
})
// watch是惰性执行默认初始化之后不会执行,只有值有变化才会触发,可通过配置参数实现默认执行
watch(obj, (newValue, oldValue) => {
  // 回调函数
  console.log('触发监控更新new',  newValue);
  console.log('触发监控更新了old',  oldValue);
},{
  // 配置immediate参数,立即执行,以及深层次监听
  immediate: true,
  deep: true
})

如果定义了reactive的数据,想去使用watch监听数据改变,则无法正确获取旧值,并且deep属性配置无效自动强制开启了深层次监听。

如果使用 ref 初始化一个对象或者数组类型的数据,会被自动转成reactive的实现方式生成proxy代理对象。也会变得无法正确取旧值。

用任何方式生成的数据,如果接收变量一个proxy代理对象,就都会导致watch这个对象时,watch回调里无法正确获取旧值。

所以当大家使用watch监听对象时,如果在不需要使用旧值的情况,可以正常监听对象没关系;但是如果当监听改变函数里面需要用到旧值时,只能监听 对象.xxx`属性 的方式才行

回答范例

  1. watchEffect立即运行一个函数然后被动地追踪它的依赖,当这些依赖改变时重新执行该函数。watch侦测一个或多个响应数据源并在数据源变化时调用一个回调函数
  2. watchEffect(effect)是一种特殊watch,传入的函数既是依赖收集数据源,也是回调函数。如果我们不关心响应式数据变化前后的值,只是想拿这些数据做些事情,那么watchEffect就是我们需要的。watch更底层,可以接收多种数据源,包括用于依赖收集getter函数,因此它完全可以实现watchEffect的功能,同时由于可以指定getter函数,依赖可以控制的更精确,还能获取数据变化前后的值,因此如果需要这些时我们会使用watch
  3. watchEffect在使用时,传入的函数会立刻执行一次。watch默认情况下并不会执行回调函数,除非我们手动设置immediate选项
  4. 从实现上来说,watchEffect(fn)相当于watch(fn,fn,{immediate:true})

原文地址:https://blog.csdn.net/formylovetm/article/details/134697511

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_9817.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注