Vue3的watch函数中,第三个参数配置对象详细分析

在Vue 3的watch函数中,第三个参数是一个配置对象,用于定义如何执行watch函数。下面是几个常用的配置项的讲解,并附上代码示例:

1、immediate

immediate:当设置为true时,会在初始渲染时立即执行watch函数。默认为false。

javascript 复制代码
// 示例代码
watch(
  'count',
  (newCount, oldCount) => {
    console.log(`new count: ${newCount}, old count: ${oldCount}`)
  },
  {
    immediate: true
  }
)

2、deep

deep:当设置为true时,会深度遍历监听对象的所有属性。默认为false。

javascript 复制代码
// 示例代码
const state = reactive({
  obj: { a: 1, b: 2 },
  arr: [1, 2, 3]
})
watch(
  () => state.obj,
  (newObj, oldObj) => {
    console.log(`new obj: ${JSON.stringify(newObj)}, old obj: ${JSON.stringify(oldObj)}`)
  },
  {
    deep: true
  }
)

3、flush

在Vue3中,watch函数的第三个参数是可选的配置项,其中一个配置项是flush,它控制何时运行watch的回调函数。flush有三个选项:"pre"、"post"和"sync"。

3.1、pre

在侦听器的回调函数运行之前立即运行更新函数,即在dom渲染完毕前调用回调函数(此时获取不到DOM!)。这是默认值。

javascript 复制代码
watch(
  () => count.value,
  () => {
    console.log("watcher callback");
  },
  { flush: "pre" }
);
3.2、post

在侦听器的回调函数运行之后立即运行更新函数,即在下一次DOM更新之后执行。

javascript 复制代码
watch(
  () => count.value,
  () => {
    console.log("watcher callback");
  },
  { flush: "post" }
);
3.3、sync

在更改被触发时立即运行侦听器的回调函数和更新函数,这是非常明确和强制的选项。

javascript 复制代码
watch(
  () => count.value,
  () => {
    console.log("watcher callback");
  },
  { flush: "sync" }
);

在大多数情况下,不需要指定flush选项,因为默认的行为通常足够了。但是,对于一些需要更精确控制的场景,flush可以是一个非常有用的配置项。

4、onTrack和onTrigger

用于跟踪和调试响应式对象属性的访问和修改。onTrack和onTrigger可以帮助我们更好地理解和追踪响应式数据的读取和修改操作,更好地进行调试和开发。

4.1、onTrack

onTrack选项会在我们读取响应式数据时被触发,我们可以在该函数中做一些记录或者打印日志的操作。例如:

javascript 复制代码
const state = reactive({
  count: 0,
})

watch(
  () => state.count,
  (count, prevCount) => {
    console.log(`count changed from ${prevCount} to ${count}`)
  },
  {
    onTrack: (event) => {
      console.log(`The ${event.key} key is being read`)
    },
  }
)

在这个例子中,我们在watch函数的第三个参数中配置了onTrack选项,然后在控制台输出了响应式数据读取的相关信息。

4.2、onTrigger

onTrigger选项会在响应式数据被修改时被触发,我们可以在该函数中做一些特殊的处理。例如:

javascript 复制代码
const state = reactive({
  count: 0,
})

watch(
  () => state.count,
  (count, prevCount) => {
    console.log(`count changed from ${prevCount} to ${count}`)
  },
  {
    onTrigger: (event) => {
      console.log(`The ${event.key} key is being set to ${event.value}`)
    },
  }
)

在这个例子中,我们在watch函数的第三个参数中配置了onTrigger选项,然后在控制台输出了响应式数据修改的相关信息。

5、总结

这些是`watch`函数的第三个参数的一些常见配置选项。您可以根据需要选择适当的配置来满足您的需求。

相关推荐
柳杉13 分钟前
从数字化到数智化:3D 可视化大屏的下一个五年
前端·ai编程·数据可视化
濮水大叔39 分钟前
函数式与对象式:前端架构的两种成本曲线
vue.js·react.js·函数式编程
风骏时光牛马1 小时前
从零到实战:AI全栈学习进阶路线
前端
FRing031 小时前
JavaScript入门到精通二十六(变量提升、函数剩余参数、展开运算符、ES6箭头函数)
开发语言·前端·javascript·es6·箭头函数
用户360055579001 小时前
Kestrel_VLLM - 15 · decode 优化四连击:19ms → 8ms
前端
IT_陈寒2 小时前
JavaScript的闭包陷阱,这个坑我躺了三天才爬出来
前端·人工智能·后端
计算机魔术师2 小时前
Microsoft Research 与合作者证明 31 年历史的 KLS 猜想
前端
vx_Biye_Design2 小时前
django房屋租赁推荐系统78455-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·课程设计·express
weixin_417396832 小时前
桌面云终端PXE启动失败怎么排查?从DHCP Option到镜像下发
开发语言·前端·php·技术·酒店·综合布线·弱电
林恒smileZAZ3 小时前
浏览器为什么加载不了超大图片
前端·vue.js·html5