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 具有缓存机制,性能更优。

相关推荐
霍理迪20 分钟前
Vue的响应式和生命周期
前端·javascript·vue.js
李剑一24 分钟前
别再瞎写了!Cesium 模型 360° 环绕,4 套源码全公开,项目直接用
前端
小码哥_常42 分钟前
Android消息机制:Handler、Looper和Message的深度剖析
前端
小码哥_常44 分钟前
安卓开发新姿势:文件Picker全攻略,无痛适配不再难
前端
happymaker06261 小时前
web前端学习日记——DAY04
前端·学习
发现一只大呆瓜1 小时前
React-路由监听 / 跳转 / 守卫全攻略(附实战代码)
前端·react.js·面试
swipe2 小时前
为什么 RAG 一定离不开向量检索:从文档向量化到语义搜索的工程实现
前端·llm·agent
OpenTiny社区2 小时前
AI-Extension:让 AI 真的「看得到、动得了」你的浏览器
前端·ai编程·mcp
IT_陈寒2 小时前
Redis缓存击穿:3个鲜为人知的防御策略,90%开发者都忽略了!
前端·人工智能·后端
农夫山泉不太甜3 小时前
Tauri v2 实战代码示例
前端