千家信息网

Vue3中的watchEffect怎么用

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容主要讲解"Vue3中的watchEffect怎么用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Vue3中的watchEffect怎么用"吧!前言
千家信息网最后更新 2026年11月02日Vue3中的watchEffect怎么用

本篇内容主要讲解"Vue3中的watchEffect怎么用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Vue3中的watchEffect怎么用"吧!

前言

watchEffect,它立即执行传入的一个函数,同时响应式追踪其依赖,并在其依赖变更时重新运行该函数。

换句话说:watchEffect相当于将watch 的依赖源和回调函数合并,当任何你有用到的响应式依赖更新时,该回调函数便会重新执行。不同于 watch,watchEffect 的回调函数会被立即执行(即 { immediate: true })

watchEffect的副作用

什么是副作用(side effect),简单的说副作用就是执行某种操作,如对外部可变数据或变量的修改,外部接口的调用等。watchEffect的回调函数就是一个副作用函数,因为我们使用watchEffect就是侦听到依赖的变化后执行某些操作。

当执行副作用函数时,它势必会对系统带来一些影响,如在副作用函数里执行了一个定时器setInterval,因此我们必须处理副作用。 Vue3的watchEffect侦听副作用传入的函数可以接收一个 onInvalidate 函数作为入参,用来注册清理失效时的回调。当以下情况发生时,这个失效回调会被触发:

  • 副作用即将重新执行时(即依赖的值改变)

  • 侦听器被停止 (通过显示调用返回值停止侦听,或组件被卸载时隐式调用了停止侦听)

import { watchEffect, ref } from 'vue'const count = ref(0)watchEffect((onInvalidate) => {  console.log(count.value)  onInvalidate(() => {    console.log('执行了onInvalidate')  })})setTimeout(()=> {  count.value++}, 1000)

上述代码打印的顺序为: 0 -> 执行了onInvalidate,最后执行 -> 1

分析:初始化时先打印count的值0, 然后由于定时器把count的值更新为1, 此时副作用即将重新执行,因此onInvalidate的回调函数会被触发,打印执行了onInvalidate,然后执行了副作用函数,打印count的值1。

import { watchEffect, ref } from 'vue'const count = ref(0)const stop = watchEffect((onInvalidate) => {  console.log(count.value)  onInvalidate(() => {    console.log('执行了onInvalidate')  })})setTimeout(()=> {  stop()}, 1000)

上述代码:当我们显示执行stop函数停止侦听,此时也会触发onInvalidate的回调函数。同样,watchEffect所在的组件被卸载时会隐式调用stop函数停止侦听,故也能触发onInvalidate的回调函数。

watchEffect的应用

利用watchEffect的非惰性执行,以及传入的onInvalidate 函数,我们可以做什么事情了?

场景一:平时我们定义一个定时器,或者监听某个事件,我们需要在mounted生命周期钩子函数内定义或者注册,然后组件销毁之前在beforeUnmount钩子函数里清除定时器或取消监听。这样做我们的逻辑被分散在两个生命周期,不利于维护和阅读。

如果我利用watchEffect,创造和销毁逻辑放在了一起,此时代码更加优雅易读~

// 定时器注册和销毁watchEffect((onInvalidate) => {  const timer = setInterval(()=> {    // ...  }, 1000)  onInvalidate(() => clearInterval(timer))})const handleClick = () => { // ...}// dom的监听和取消监听onMounted(()=>{  watchEffect((onInvalidate) => {    document.querySelector('.btn').addEventListener('click', handleClick, false)    onInvalidate(() => document.querySelector('.btn').removeEventListener('click', handleClick))  })})

场景二:利用watchEffect作一个防抖节流(如取消请求)

const id = ref(13)watchEffect(onInvalidate => {   // 异步请求  const token = performAsyncOperation(id.value)  // 如果id频繁改变,会触发失效函数,取消之前的接口请求  onInvalidate(() => {    // id has changed or watcher is stopped.    // invalidate previously pending async operation    token.cancel()  })})

到此,相信大家对"Vue3中的watchEffect怎么用"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

函数 副作用 定时器 监听 代码 就是 组件 内容 周期 场景 接口 生命 逻辑 钩子 学习 更新 实用 更深 频繁 优雅 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技制造互联网公司 互联网金融 科技 互联网金融 科技金融 宜安科技 互联网金融 一五八零互联网科技 互联网科技类展会 滨湖区互联网智能科技产品供应 广西拼得多互联网科技有限公司 深圳互联网科技怎么样 湖南洣水互联网科技有限公司扣款 青岛科技大学互联网大赛研究生 互联网新科技动漫ppt素材 浙南科技城互联网大厦建设工程 互联网科技创新的路径 用友工业互联网科技发展 怎样加入科技互联网 黑科技 体验场景 互联网大会 吉林省码上互联网科技电话 瑞安市蟠桃会互联网科技有限公司 株洲百竞科技的互联网营销顾问 云南咖啡 互联网佳科技有限公司 互联网科技有限公司图片 南京欣网互联网科技 智慧科技互联网 玖二柒互联网科技公司待遇 昭通云南众福互联网科技有限公司 上海宁丞科技互联网 无锡工业互联网科技有限公司 互联网方面的科技前沿
0