Vue3中watch的应用场景

在 Vue 中,watch 用于监听数据的变化并执行相应的操作,适用于需要在数据变化时进行复杂处理或异步操作的场景。以下是一些常见的应用场景:

  1. 数据变化时的异步操作

    当需要在数据变化后发起 API 请求、执行定时器等异步操作时,watch 是合适的选择。

    例如:监听搜索关键词变化,延迟发送搜索请求以避免频繁调用接口:

    javascript 复制代码
    watch: {
      searchQuery(val) {
        // 清除之前的定时器
        clearTimeout(this.timer);
        // 延迟 500ms 执行搜索
        this.timer = setTimeout(() => {
          this.fetchSearchResults(val); // 调用接口的方法
        }, 500);
      }
    }
  2. 监听路由变化

    在单页应用中,需要根据路由参数的变化更新页面内容时,可以监听 $route

    javascript 复制代码
        watch: {
          '$route.params.id'(newId) {
            // 当路由中的 id 变化时,重新加载对应的数据
            this.loadData(newId);
          }
        }
  3. 复杂数据转换或计算

    当数据变化后需要进行复杂的转换或计算(超出 computed 的简单依赖关系)时,使用 watch

    javascript 复制代码
    watch: {
      userInfo(newVal) {
        // 当用户信息变化时,解析并处理多个字段
        this.fullName = `${newVal.firstName} ${newVal.lastName}`;
        this.isAdult = newVal.age >= 18;
        // 可能还包含其他复杂逻辑
      }
    }
  4. 监听对象 / 数组的深层变化

    对于对象或数组的深层属性变化,watch 可以通过 deep: true 配置进行监听:

    javascript 复制代码
    watch: {
      'form.user.name': {
        handler(newVal) {
          // 监听对象深层属性变化
          console.log('用户名变为:', newVal);
        },
        deep: true // 开启深层监听
      }
    }
  5. 初始化时立即执行监听逻辑 通过 immediate: true 配置,可以让监听在组件初始化时立即执行一次:

    javascript 复制代码
    watch: {
      defaultLanguage: {
        handler(val) {
          this.loadLanguagePack(val);
        },
        immediate: true // 初始化时就执行一次
      }
    }

注意watch 更适合处理 "副作用"(如异步操作、DOM 操作),而简单的依赖计算应优先使用 computed,因为 computed 具有缓存机制,性能更优。

相关推荐
AI前端老薛2 分钟前
CSS实现动画的几种方式
前端·css
携欢6 分钟前
portswigger靶场之修改序列化数据类型通关秘籍
android·前端·网络·安全
GuMoYu7 分钟前
npm link 测试本地依赖完整指南
前端·npm
代码老祖7 分钟前
vue3 vue-pdf-embed实现pdf自定义分页+关键词高亮
前端·javascript
未等与你踏清风7 分钟前
Elpis npm 包抽离总结
前端·javascript
代码猎人8 分钟前
如何使用for...of遍历对象
前端
秋天的一阵风10 分钟前
🎥解决前端 “复现难”:rrweb 录制回放从入门到精通(下)
前端·开源·全栈
林恒smileZAZ10 分钟前
【Vue3】我用 Vue 封装了个 ECharts Hooks
前端·vue.js·echarts
颜酱10 分钟前
用填充表格法-继续吃透完全背包及其变形
前端·后端·算法
代码猎人11 分钟前
new操作符的实现原理是什么
前端